首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -奇数正则表达式与+/*在组上匹配

Python -奇数正则表达式与+/*在组上匹配
EN

Stack Overflow用户
提问于 2017-04-27 10:20:57
回答 3查看 94关注 0票数 0
代码语言:javascript
复制
>>> src = '  pkg.subpkg.submod.thing  pkg2.subpkg.submod.thing  '
>>> re.search(r'\s*(\w+\.)+', src).groups()
('submod.',)

这个正则表达式似乎把所有不是空间的东西放到了一个/组中--在regex比赛停止之前没有什么损失。

为什么这里的组中只有最后一次 "+“重复-而不是('pkg.subpkg.submod.',)

或者('pkg.',) --早停是因为没有真正的重复--在另一种意义上没有“信息丢失”?

(我需要使用另一个(?:...),如r'\s((?:\w+\.)+)')

更奇怪的是:

代码语言:javascript
复制
>>> src = '  pkg.subpkg.submod.thing  pkg2.subpkg.submod.thing  '
>>> re.search(r'\s(\w+\.)*', src).groups()
(None,)

编辑:正如@Avinash所指出的,“更奇怪”实际上“不那么奇怪”,因为--不像预期的--比赛只是在组前结束;所以

代码语言:javascript
复制
>>> re.search(r'\s+(\w+\.)*', '  pkg.subpkg.submod.thing').groups()
('submod.',)

。。然后产生与"+“相同的被质疑的行为:最后一次重复--在看起来迷失之前.

EN

回答 3

Stack Overflow用户

发布于 2017-04-27 10:29:35

我会解释更奇怪的部分..。

代码语言:javascript
复制
src = '  pkg.subpkg.submod.thing  pkg2.subpkg.submod.thing  '

一旦找到第一个匹配项,re.search就停止匹配。所以,

r'\s(\w+\.)*'将匹配第一个空格字符(*重复前一个模式0次或多次),因为在第一个空格之后没有匹配的(\w+\.)*,searchObj上的groups()函数返回None,searchObj上的group应该返回作为第一个空格的空间。

票数 1
EN

Stack Overflow用户

发布于 2017-04-27 10:42:41

我不知道,为什么这对你来说很奇怪。你能指望什么?

在文档中可以找到以下内容:

re.search( pattern,string,flags=0)通过字符串扫描寻找正则表达式模式的第一个位置。

代码语言:javascript
复制
re.search(r'\s*(\w+\.)+', src).groups()

在搜索字符串中,只有一个组:(\w+.),因为默认情况下,它是贪婪的,所有pkg.subpkg.都是在找到submod.之前吃掉的,这是最后一个被填充的字符串匹配。

你的第二次尝试不匹配,因为甚至没有一个必要的小组来完成这个声明,所以所有的三个部分都被吃掉了,而在组内你什么也找不到。

你在找这个吗?

代码语言:javascript
复制
re.search(r'\s*((\w+\.)+)', src).groups()[0]

为了更好地理解它,请尝试以下几点:

代码语言:javascript
复制
re.search(r'\s*((\w+\.)*)(\w+\.)*', 'a.b.c.d.e.f.g.h.i').groups()
票数 0
EN

Stack Overflow用户

发布于 2017-04-27 10:27:18

这应该可以很好地匹配完整的字符串“pkg.subpkg.submod.thing pkg2.subpkg.submod.thing”。

代码语言:javascript
复制
(\s*(\w+[.\s])+)+

如果您希望输出‘pkg.subpkg.submod.thing’,那么请使用以下命令

代码语言:javascript
复制
\s*(\w+[.\s])+
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43655005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档