我陷入了转储:
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分隔符与美元符号匹配??
答案 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'
您需要包含多行标记,然后$将在换行符处匹配。