这个简单的正则表达式有什么问题?

时间:2011-09-25 01:33:23

标签: python regex

我陷入了转储:

import re
print re.search('return[^$]+',
                'return to the Treasury of $40 million\nnow!').group(0)

上述正则表达式仅打印return to the Treasury of,但我希望它包含$40 million。我从正则表达式中理解的是,我要求take every thing until the end of the line

我不想使用.*,我希望endline delimiter从某个点开始直到行尾。如果我从搜索字符串中删除$,则会打印完整的字符串。为什么endline分隔符与美元符号匹配??

3 个答案:

答案 0 :(得分:3)

return[^$]+

将匹配字符串“return”,后跟任何不是'$'的字符一次或多次。

这是因为[]平均字符组和内部[]特殊字符是线程化的简单字符。

因此它只与美元符号匹配。

为什么不使用:

return.+$

这正是你想要的。

答案 1 :(得分:0)

为什么不想使用.*

您拥有的正则表达式将匹配任何以“return”开头的字符串,然后匹配一个或多个不是“$”字符的字符。请注意,这不会查找行尾标记。

return.*$将匹配所有内容,包括行结束标记。如果你正在处理多行输入,你可能(但可能不是)需要使.*成为一个惰性匹配器。

答案 2 :(得分:0)

import re
text = 'we will return to the Treasury of $40 million\nunits of money.'
re.search(r'return.*$', text, re.MULTILINE).group(0)

# prints 'we will return to the Treasury of $40 million'

您需要包含多行标记,然后$将在换行符处匹配。