加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式在Python中匹配

发布时间:2020-12-14 06:07:58 所属栏目:百科 来源:网络整理
导读:我有关于正则表达式的问题.使用或构建时 $pythonPython 2.7.3 (default,Sep 26 2012,21:51:14) [GCC 4.7.2] on linux2Type "help","copyright","credits" or "license" for more information. import re for mo in re.finditer('a|ab','ab'):... print mo.st
我有关于正则表达式的问题.使用或构建时

$python
Python 2.7.3 (default,Sep 26 2012,21:51:14) 
[GCC 4.7.2] on linux2
Type "help","copyright","credits" or "license" for more information.
>>> import re
>>> for mo in re.finditer('a|ab','ab'):
...     print mo.start(0),mo.end(0)
... 
0 1

我们只得到一个匹配,这是预期作为第一个最左边的分支,被报告被接受.我的问题是它是否可能以及如何构造一个正则表达式,它将同时产生(0,1)和(0,2).而且,对于形式为r1 |的任何正则表达式,一般如何做到这一点r2 | …… | rn.

同样,是否有可能实现*,和?结构体?默认情况下:

>>> for mo in re.finditer('a*','aaa'):
...     print mo.start(0),mo.end(0)
... 
0 3
3 3
>>> for mo in re.finditer('a+',mo.end(0)
... 
0 3
>>> for mo in re.finditer('a?',mo.end(0)
... 
0 1
1 2
2 3
3 3

第二个问题是为什么空字符串在末尾匹配,而不是像*和?那样在其他地方匹配? ?

编辑:

我想我现在意识到这两个问题都是无稽之谈:正如@mgilson所说,re.finditer只返回非重叠的匹配,我猜每当正则表达式接受(部分)字符串时,它就会终止搜索.因此,使用Python匹配引擎的默认设置是不可能的.

虽然我想知道如果Python在正则表达式匹配中使用回溯,那么在接受字符串之后让它继续搜索应该不是很困难.但这会破坏正则表达式的通常行为.

EDIT2:

这在Perl中是可能的.请参阅下面的@Qtax回答.

解决方法

我不认为这是可能的. re.finditer状态的 docs:

Return an iterator yielding MatchObject instances over all non-overlapping matches for the RE pattern in string

(重点是我的)

在回答你关于为什么空字符串在其他地方不匹配的另一个问题时,我认为这是因为字符串的其余部分已经在其他地方匹配,并且finditer仅为匹配的非重叠模式提供匹配(参见第一部分的答案; – ).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读