如何从文本中提取以#开头到空格前的子串(如#Covid19等话题标签)
话题标签提取实现方案
这类以固定符号开头的子串提取直接用正则匹配就能实现,性能和准确率都满足需求。
核心匹配规则
正则匹配模式为#\S+:
- 开头
#匹配话题标签的起始标识 \S+匹配所有非空白字符,直到遇到第一个空格自动停止匹配- 开启全局匹配即可一次性拿到文本里所有符合要求的标签
各语言实现示例
- Python 实现
import re text = "今天是重要的里程碑。自3月21日以来首次没有报告#CoVid19死亡病例。这是充满希望的一天,我们终将获胜#VaccineRecovery。" # 匹配所有话题标签,自动过滤结果里的标点后缀可以用r'#\w+' hashtags = re.findall(r'#\S+', text) print(hashtags) # 输出:['#CoVid19', '#VaccineRecovery']
- JavaScript 实现
const text = "今天是重要的里程碑。自3月21日以来首次没有报告#CoVid19死亡病例。这是充满希望的一天,我们终将获胜#VaccineRecovery。"; const hashtags = text.match(/#\S+/g) || []; console.log(hashtags); // 输出:['#CoVid19', '#VaccineRecovery']
- Java 实现
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HashtagExtract { public static void main(String[] args) { String text = "今天是重要的里程碑。自3月21日以来首次没有报告#CoVid19死亡病例。这是充满希望的一天,我们终将获胜#VaccineRecovery。"; Pattern pattern = Pattern.compile("#\\S+"); Matcher matcher = pattern.matcher(text); List<String> hashtags = new ArrayList<>(); while (matcher.find()) { hashtags.add(matcher.group()); } System.out.println(hashtags); // 输出:[#CoVid19, #VaccineRecovery] } }
补充说明
如果需要剔除标签末尾的标点符号(比如示例里#VaccineRecovery后面的句号),可以把正则调整为#[\w\u4e00-\u9fa5]+,支持匹配中英文、数字、下划线组成的标签,自动忽略末尾标点。
内容的提问来源于stack exchange,提问作者ribena1980
相关产品推荐
相关产品推荐

