正则表达式在python中排除单词

时间:2013-11-07 05:59:41

标签: python regex

我有一个正则表达式'[\w_-]+',它允许使用字母数字或下划线。

我在python列表中有一组单词,我不想允许

listIgnore = ['summary', 'config']

正则表达式需要进行哪些更改?

P.S:我是regex的新手

2 个答案:

答案 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}}。

显然,你选择的排除越多,效率就越低。可能有更好的方法来做到这一点。