如何使用正则表达式匹配单词及其后跟的完整方括号对内容
问题解决方法
你原有正则匹配失败的核心原因有两个:
- 方括号内的匹配规则只覆盖了字母、数字、下划线,没有包含
-这类特殊符号 - 左右方括号被单独设置为可选匹配,没有和括号内的内容绑定成一个完整的匹配单元,很容易出现只匹配到左括号的残缺结果
可用正则方案
直接使用如下正则调用re.findall即可得到预期结果:
import re str2s = 'orange,juices,apple,apple[-2]' res = re.findall( r'[A-Za-z][A-Za-z0-9_%.]*(?:\[[^\]]*\])?', str2s, flags=re.IGNORECASE ) print(res) # 输出: ['orange', 'juices', 'apple', 'apple[-2]']
正则规则说明
各部分匹配逻辑如下:
[A-Za-z][A-Za-z0-9_%.]*:匹配开头的单词主体,和你原本定义的合法单词规则一致,使用原始字符串r''编写正则可以避免多余的转义符,减少书写错误(?:\[[^\]]*\])?:匹配可选的方括号后缀:(?:...)是非捕获分组,仅用来把括号相关的匹配规则打包成整体,不会额外生成捕获结果\[匹配左方括号[^\]]*匹配任意数量的非右方括号字符,不管括号内是负号、数字还是其他合法字符都能覆盖,不需要逐个枚举符号\]匹配右方括号- 末尾的
?表示整个方括号后缀是可选的,没有后缀的普通单词也可以正常匹配
内容的提问来源于stack exchange,提问作者mojop
相关产品推荐
相关产品推荐

