如何编写正则匹配指定关键词及后续仅含字母、/、空格的内容
正则匹配问题解决方案
原写法错误点
你的现有正则存在以下问题:
- 字符集外层多套了一层无效的方括号,且末尾多了冗余的右括号,属于语法错误
- 没有设置匹配终止逻辑,遇到数字、括号等非法字符不会停止匹配
- 缺少单词边界限制,可能误匹配到包含关键词的其他长单词(如
hardware中的hard)
正确正则
r'\b(qtr|hard|quarter)[a-zA-Z/\s]*'
正则规则说明
\b:单词边界,确保匹配的是独立的关键词,不会命中包含关键词的其他单词(qtr|hard|quarter):匹配你指定的三个关键词,配合re.I参数可实现大小写不敏感匹配[a-zA-Z/\s]*:匹配关键词后续0个或多个符合要求的字符,仅允许大小写英文字母、正斜杠、空格,遇到数字、括号、特殊符号时自动终止匹配
完整测试代码
import re test = [ 'id:12345 cli hard/qtr Mix', 'id:12345 cli qtr 90%', 'id:12345 cli hard (red)', 'id:12345 cli hard work', 'Hello world' ] # 编译正则,开启不区分大小写模式 pattern = re.compile(r'\b(qtr|hard|quarter)[a-zA-Z/\s]*', re.I) res = [] for item in test: match_ret = pattern.search(item) # 匹配成功则去除首尾多余空格后存入结果,否则存None res.append(match_ret.group().strip() if match_ret else None) print(res)
输出结果
完全匹配你的预期:
['hard/qtr Mix', 'qtr', 'hard', 'hard work', None]
内容的提问来源于stack exchange,提问作者porgrammer3124
相关产品推荐
相关产品推荐

