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

2024-09-30 01:23:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我被困在垃圾堆里:

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

上面的regex只打印return to the Treasury of,但我希望它包含$40 million。我对regex的理解是我要求它take every thing until the end of the line。在

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


Tags: oftheto字符串importresearchreturn
3条回答

为什么不使用.*?在

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

return.*$将匹配行尾标记之前的所有内容(包括行尾标记)。如果要处理多行输入,则可能需要(但可能不需要)使.*成为延迟匹配器。在

return[^$]+

将匹配一个字符串“return”,后跟非“$”的任何字符一次或多次。在

这是因为[]表示字符组,[]内部的特殊字符是作为简单字符进行线程化的。在

因此,直到美元与符号匹配为止。在

为什么不使用:

^{pr2}$

这正是你想要的。在

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'

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

相关问题 更多 >

    热门问题