Regex + python27:如何让字符与正则表达式不匹配?

时间:2015-09-14 10:39:03

标签: python regex python-2.7

我有以下正则表达式:

import re
identifiers = "[a-zA-Z][a-zA-Z0-9]*"
address = "\\$" + identifiers + "(\\." + identifiers + ")"*
s = re.findall(pattern, "hello\nworld\n$myworld\nrandom!!(+")

结果我得到了:

[('hello', ''), ('', ''), ('world', ''), ('', ''), ('$myworld', ''), ('', ''), ('random', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', '')]

如何编写与标识符或地址不匹配的正则表达式?假设我可以在模式中将越来越多的正则表达式组合在一起,即:

pattern = address |标识符|字符串|评论| ...

怎么说〜模式?通过这样做,我可以发出一条消息,说明以下字符不被理解:" !!(+"(忽略空格)

2 个答案:

答案 0 :(得分:1)

我不确定它是否能满足您的需求,但您可以通过无效替换有效模式来获取其他角色。

>>> import re
>>> identifiers = "[a-zA-Z][a-zA-Z0-9]*"
>>> invalid = re.sub(identifiers, "", "hello\nworld\n$myworld\nrandom!!(+")
>>> print invalid
'\n\n$\n!!(+'

答案 1 :(得分:0)

我对标识符模式做了一些小改动,这可能会解决你的期望,我想

identifiers = "[^a-zA-Z][^a-zA-Z0-9]*"
invalid = re.findall(identifiers, "hello\nworld\n$myworld\nrandom!!(+")
invalid = "".join(invalid)

输出 无效:' \ n \ n $ \ n !!(+'