我想匹配一个包含字母数字和一些特殊字符但不是换行符的字符串。但是,每当我的字符串有换行符时,它也会匹配换行符。我检查了一些标志的文件,但没有一个看起来相关。
以下是Python 3.6.2 REPL
中的示例代码>>> import re
>>> s = "do_not_match\n"
>>> p = re.compile(r"^[a-zA-Z\+\-\/\*\%\_\>\<=]*$")
>>> p.match(s)
<_sre.SRE_Match object; span=(0, 12), match='do_not_match'>
预期的结果是它不应该匹配,因为我最后有换行符。
https://regex101.com/r/qyRw5s/1
我对这里缺少的东西感到有点困惑。
答案 0 :(得分:3)
问题是$
在换行符之前的字符串的末尾匹配(如果有的话)。
如果您不想在最后匹配换行符,请在正则表达式中使用\Z
代替$
。
请参阅re
模块的文档:
'$'
匹配字符串的结尾或在字符串末尾的换行符之前\ž
仅匹配字符串末尾的匹配。