我发现这种行为有点奇怪:
pattern = re.compile(r"test")
print pattern.match("testsda") is not None
True
print pattern.match("astest") is not None
False
因此,当字符串与其末尾的模式不匹配时,一切都很好。但是当字符串与开头的模式不匹配时,字符串就不再与模式匹配了。
相比之下,grep在两种情况下都成功:
echo "testsda" | grep test
testsda
echo "adtest" | grep test
adtest
你知道为什么会这样吗?
答案 0 :(得分:4)
re.match
旨在仅匹配字符串的开头。作为docs州:
Python提供了两种基于常规的基本操作 表达式:
re.match()
仅在开头检查匹配项 字符串,而re.search()
检查匹配中的任何位置 string(这是Perl默认执行的操作)。
如果你使用re.search
,你应该没问题:
import re
pattern = re.compile(r"test")
print pattern.search("testsda") is not None
print pattern.search("astest") is not None
打印
True
True