吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1497|回复: 11
收起左侧

[求助] 请教正则里星号与加号的不同匹配

[复制链接]
黄河大鲤鱼 发表于 2020-5-24 11:52
见图,字符串s首位是个空格,星号和加号的匹配结果不同,大神能细致讲解下吗 12.png

--------------------------------------------以下是定义--------------------------------------------*对它前面的正则式匹配0到任意次重复, 尽量多的匹配字符串。 ab* 会匹配 'a', 'ab', 或者 'a'``后面跟随任意个 ``'b'。+对它前面的正则式匹配1到任意次重复。 ab+ 会匹配 'a' 后面跟随1个以上到任意个 'b',它不会匹配 'a'。--------------------------------------------说明结束处--------------------------------------------我的理解是,使用星号*匹配,被匹配的字符串中可以没有待匹配正则式,如果有的话则尽可能多的匹配上;使用加号+匹配,被匹配的字符串中必须要有待匹配正则式,而且要尽可能多的匹配上。不知道我的理解对吗?如果我的理解正确,回到本题中,/S代表非空白字符,由于字符串s中有非空白字符:1.星号*在贪婪下尽可能多的进行匹配,结果应该是helloWorld;2.加号+在贪婪下也尽可能多的进行匹配,结果也应该是helloWorld但是运行结果却和我的理解不一样,请大神指导一下。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

不苦小和尚 发表于 2020-5-24 12:00
+号是匹配0个或1个,所以就匹配了一个空
*号是尽可能多的匹配
ymhld 发表于 2020-5-24 12:23
import re
s=" helloworld"
ret=re.search(u'\S*',s)
ret1=re.search(u'\S+',s)

print('ret',ret)
print(ret1)

ret <re.Match object; span=(0, 0), match=''>
<re.Match object; span=(1, 11), match='helloworld'>
两个一个是匹配到了一个开始的“”,不是空格
第二个匹配到了helloword
ymhld 发表于 2020-5-24 12:29
import re
s=" helloworld"
ret=re.findall(u'\S*',s)
ret1=re.findall(u'\S+',s)

print('ret',ret)
print(ret1)

ret ['', 'helloworld', '']
['helloworld']
这样就知道了,第一个是三个匹配,有两个空集和一个helloworld
戰龍在野 发表于 2020-5-24 12:45
谢谢楼上的兄弟学习了
luanshils 发表于 2020-5-24 12:53
可以理解为*是贪婪的
冥界3大法王 发表于 2020-5-24 14:36
问新家点匹配;
星号家住01栋;
加号家住1+栋。
自从你亲哥编成口诀后,再也没有忘记过。
@黄河大鲤鱼
 楼主| 黄河大鲤鱼 发表于 2020-5-24 19:08
ymhld 发表于 2020-5-24 12:29
import re
s=" helloworld"
ret=re.findall(u'\S*',s)

结果上是如此,我想知道为什么会这样。此题中,\S*第一个为什么会匹配到'',结果为什么还有个''
我试过去掉首位空格,\S*除了匹配helloWorld还会再匹配个''
我想知道原因。
 楼主| 黄河大鲤鱼 发表于 2020-5-24 19:09
冥界3大法王 发表于 2020-5-24 14:36
问新家点匹配;
星号家住01栋;
加号家住1+栋。

没看懂,尴尬了。
ymhld 发表于 2020-5-24 19:11
黄河大鲤鱼 发表于 2020-5-24 19:08
结果上是如此,我想知道为什么会这样。此题中,\S*第一个为什么会匹配到'',结果为什么还有个''
我试过 ...

后面的一个应该是回车之类的\n,前一个也许是开始的符号?这个真不太清楚,不过*表示0到多个,当表示为0时,也表示空格前的空元素
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 03:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表