为什么Python正则表达式在以下2个量词中会产生不同的结果?

问题描述 投票:0回答:1
尽管研究了基于长度和计数的量词之间的语义差异,但我注意到Python 3的正则表达式在以下2个正则表达式中给出了不同的结果(请注意量词

+

*

Python 3.10.16 (main, Dec  7 2024, 13:31:33) [Clang 16.0.0 (clang-1600.0.26.6)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> re.sub('(.{4,5})+', '-', '1234123412341234')
'-4'
>>> re.sub('(.{4,5})*', '-', '1234123412341234')
'--4-'
>>>

我能够在PHP中复制它,大概是因为它们都在背后使用PCRE:
$ php -a
Interactive shell

php > echo preg_replace('/(.{4,5})+/', '-', '1234123412341234');
-4
php > echo preg_replace('/(.{4,5})*/', '-', '1234123412341234');
--4-
php >

如何来?
python php regex pcre
1个回答
0
投票

pypython不使用pcre,所以不是。

('/(.{4,5})+/'


tben首先匹配“ 12341”,tben延伸至“ 23412”,然后扩展为“ 34123”。它不能做更多的事情,因此前15个字符被“  - ”取代。它无法匹配尾随的“ 4”,所以那是一个人。

('/(.{4,5})*/'

以相同的方式匹配前15个字符。但是后来又留下了一个尾随的“ 4”。和空字符串
does

匹配,因为

*表示0或更多匹配和0个计数。因此,您将获得第二个“ - ”。尾随的“ 4”本身不匹配,所以它是一个人。然后在尾随的“ 4”匹配后(再次0次)之后的空字符串,因此您将获得最终的“ _”。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.