我有一个正则表达式'[\w_-]+'
,它允许使用字母数字或下划线。
我在python列表中有一组单词,我不想允许
listIgnore = ['summary', 'config']
正则表达式需要进行哪些更改?
P.S:我是regex的新手
答案 0 :(得分:3)
>>> line="This is a line containing a summary of config changes"
>>> listIgnore = ['summary', 'config']
>>> patterns = "|".join(listIgnore)
>>> print re.findall(r'\b(?!(?:' + patterns + r'))[\w_-]+', line)
['This', 'is', 'a', 'line', 'containing', 'a', 'of', 'changes']
答案 1 :(得分:2)
这个问题引起了我的兴趣,所以我开始寻找答案:
'^(?!summary)(?!config)[\w_-]+$'
现在,只有在想要将正则表达式与完整字符串匹配时,这才有效:
>>> re.match('^(?!summary)(?!config)[\w_-]+$','config_test')
>>> (None)
>>> re.match('^(?!summary)(?!config)[\w_-]+$','confi_test')
>>> <_sre.SRE_Match object at 0x21d34a8>
为了使用您的列表,只需在正则表达式(?!<word here>)
之后为每个单词添加更多^
。这些被称为前瞻。 Here's一些好消息。
如果您尝试在字符串中匹配(即没有^
和$
),那么我不确定是否可能。例如,正则表达式将只选择不匹配的字符串的子集。示例:ummary
的{{1}}。
显然,你选择的排除越多,效率就越低。可能有更好的方法来做到这一点。