regex match() 在 Python 中未能匹配简单模式

3 投票
1 回答
2812 浏览
提问于 2025-04-18 13:30

我正在尝试在Python中使用一些简单的正则表达式功能。我用正则表达式来匹配阿拉伯字母的模式,但在最简单的情况下,当我在模式前面加几个字母时,它似乎不管用,无论有没有连写字母:

>>> p = re.compile(r'ترينهايمان')
>>> p.match('به ترينهايمان')
>>>


>>> p = re.compile(r'ترینهایمان')
>>> p.match('بهترینهایمان') 
>>>

这个较长的字符串基本上就是模式本身,只是在前面加了两个字母。

据我所知,match应该返回一个值,但它没有。

有趣的是,当你在模式的末尾加一个字母时,它却能匹配到:

>>> p = re.compile(r'ترينهايمان')
>>> p.match('ترينهايماني')
<_sre.SRE_Match object at 0x02C52FA8>
>>> p.match('بهترينهايمان')
>>>

1 个回答

4

re.match 只会匹配从字符串开头开始的模式:

re.match(pattern, string, flags=0)

如果字符串开头的零个或多个字符与正则表达式模式匹配,就会返回一个对应的 MatchObject 实例。如果字符串与模式不匹配,则返回 None;注意,这和匹配长度为零的情况是不同的。

因为你想匹配的字符串开头有额外的字符,所以 match 不会把这个字符串当作匹配。你需要使用 re.search 来进行匹配。

撰写回答