Python正则表达式匹配含指定子串的完整单词问题求助
原写法存在的问题
- 正则规则仅覆盖了
tion/ex等目标子串本身,没有包含子串前后同属一个单词的其他字母,所以匹配结果只有子串片段,无法返回完整单词 - 字符串没有加原始前缀
r,\b会被Python解析为退格转义符,无法作为正则的单词边界规则生效 ast+\b的写法有误,量词+仅作用于相邻的t字符,会匹配astt这类不符合要求的序列,违背了匹配包含ast子串的需求- 直接使用捕获分组做或匹配时,
re.findall会优先返回分组内的内容,就算写了全单词规则也只会返回目标子串片段
修正后的实现
import re def latin_ish_words(text): return re.findall(r'\b[a-z]*(?:tion|ex|ph|ost|ist|ast)[a-z]*\b', text, re.I)
正则规则说明
r前缀声明原始字符串,确保\b作为单词边界规则传递给正则引擎\b标记单词边界,避免匹配到数字、符号与字母组合的非纯单词内容[a-z]*匹配目标子串前后的任意英文字母(不区分大小写由re.I参数实现)(?:...)是非捕获分组,将多个目标子串作为整体做或匹配,同时不会让re.findall仅返回分组内的子串内容,保证返回完整的匹配单词
测试验证
- 调用
latin_ish_words("This functions as expected"),返回['functions', 'expected'],符合预期 - 调用
latin_ish_words('Philosophy ex nihilo existed in the past'),返回['Philosophy', 'ex', 'existed', 'past'],符合预期
内容的提问来源于stack exchange,提问作者paraglider5
相关产品推荐
相关产品推荐

