如何调整正则表达式规则,使Python分词代码输出无连字符的目标结果
解决方案
你可以调整正则规则仅匹配纯字母序列,再对匹配结果做首字母大写处理即可,修改后的代码如下:
import regex as re def tokenize(text): # 仅匹配连续的纯字母片段,自动跳过连字符、数字、撇号、标点等非字母字符 raw_tokens = re.findall(r'\p{L}+', text) # 对每个分词做首字母大写,剩余字符保留原有大小写 return [token[0].upper() + token[1:] for token in raw_tokens] text = "let's defeat the SARS-coV-2 delta variant together in 2021!" tokens = tokenize(text) print("|".join(tokens))
代码修改说明
- 原正则规则允许匹配包含连字符、数字的字符串,所以会把
SARS-coV-2、let识别为单个分词,漏掉了撇号后的s,同时保留了连字符。 - 改用
r'\p{L}+'作为匹配规则后,只会匹配连续的Unicode字母序列,碰到非字母字符就会截断匹配,自然完成按非字母边界拆分的需求,同时自动过滤掉数字、标点。 - 首字母处理逻辑可以根据你的需求调整:如果需要除首字母外其余字符统一转小写,把列表生成式的内容替换为
token.capitalize()即可。
运行上述代码后输出为:Let|S|Defeat|The|SARS|CoV|Delta|Variant|Together|In,符合预期要求。
内容的提问来源于stack exchange,提问作者Naceur Fennich
相关产品推荐
相关产品推荐

