我有一个正则表达式'[\w_-]+'
,它允许字母数字字符或下划线。
我有一个 Python 列表中的单词集合,我不想让它们被匹配。
listIgnore = ['summary', 'config']
正则表达式需要做哪些改变?
P.S:我对正则表达式很新。
>>> 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']
'^(?!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>)
。这些被称为前瞻断言。这里有一些好的信息。
如果您正在尝试在字符串内进行匹配(即没有^
和$
),那么我不确定是否可能。例如,正则表达式将仅选择不匹配的子集字符串。例如:ummary
用于summary
。
显然,您选择的排除越多,效率就会越低。可能有更好的方法来实现它。