正则表达式循环遍历匹配并计数
想请问一下大佬使用正则表达式时,如何循环原表达式,从而得到匹配表达式出现了几次?例如:
pattern = '11\d\d\d11'
yuan='11000111111111'
re.search(pattern,yuan)
请问这种情况如何得到pattern出现了多少次?
可以这样:
import re
pattern = '11\d\d\d11'
yuan='11000111111111'
pointer = 0
count = 0
while re.search(pattern,yuan):
pointer = re.search(pattern,yuan).span()[-1]
yuan = yuan
count += 1
print('一共匹配了%d次'%count) Twilight6 发表于 2020-7-21 22:09
可以这样:
11000111111111,可以不用匹配过就不算,例如,11000111111111,11000111111111,这样也可以。那这样怎么得到呢? JoeJoy 发表于 2020-7-21 22:25
11000111111111,可以不用匹配过就不算,例如,11000111111111,11000111111111,这样也可以。那这样怎 ...
我写的就是匹配过的就不算了呀,因为每次都是从上次匹配到的末尾的下一个字符开始的 本帖最后由 JoeJoy 于 2020-7-21 22:34 编辑
Twilight6 发表于 2020-7-21 22:28
我写的就是匹配过的就不算了呀,因为每次都是从上次匹配到的末尾的下一个字符开始的
嗯嗯,我看到你写的是这样子。
我问的是不用匹配过了就抛弃,有些可以连着用
例如:
pattern='11\d\d\d\d\d\d\d\d\d11'
matter='110111111011110111000110111110'
110111111011110111000110111110
110111111011110111000110111110
110111111011110111000110111110
......
这种形式
JoeJoy 发表于 2020-7-21 22:29
嗯嗯,我看到你写的是这样子。
我问的是不用匹配过了就抛弃,有些可以连着用
第一次:11000111111111
第二次:11000111111111
第三次:11000111111111
第四次:11000111111111
你想要这种效果?
import re
pattern = '11\d\d\d11'
yuan='11000111111111'
pointer = 0
count = 0
while re.search(pattern,yuan):
pointer = re.search(pattern,yuan).span() + 1
yuan = yuan
count += 1
print('一共匹配了%d次'%count) Twilight6 发表于 2020-7-21 22:32
第一次:11000111111111
第二次:11000111111111
第三次:11000111111111
是的,这种效果 Twilight6 发表于 2020-7-21 22:32
第一次:11000111111111
第二次:11000111111111
第三次:11000111111111
可是这个用在我刚才发的一个新的情况又不太行了 JoeJoy 发表于 2020-7-21 22:37
可是这个用在我刚才发的一个新的情况又不太行了
晚上我图片加载不出来,你发代码吧 Twilight6 发表于 2020-7-21 22:32
第一次:11000111111111
第二次:11000111111111
第三次:11000111111111
例如:
pattern='11\d\d\d\d\d\d\d\d\d11'
matter='110111111011110111000110111110'
110111111011110111000110111110
110111111011110111000110111110
110111111011110111000110111110
......
这种形式刚才试了试不太行,这个怎么搞呢?
Twilight6 发表于 2020-7-21 22:38
晚上我图片加载不出来,你发代码吧
在五楼,那个情况,你可以看到么?
去休息了,暂时就帮你到这了哈 本帖最后由 nahongyan1997 于 2020-7-22 16:33 编辑
这个我就推荐一种思路,很简单,每次匹配之后删掉原字符串中匹配到的字符串的第一个字符与匹配到的字符串前面的所有的字符,
因为 search 是从左往右搜索的,这样可以保证匹配结果的不重复性与重用性。
如果您对我的答案感到满意,请设置最佳答案! import re
pattern = r'11\d\d\d\d\d\d\d\d\d11'
string = '110111111011110111000110111110'
index = 0
while True:
r = re.search(pattern, string)
if r is None:
break
distance = r.span()-r.span()
fore = string[:index+r.span()]
content = string
rear = string
print(f"{fore}<-{content}->{rear}")
index += r.span()+1https://cdn.jsdelivr.net/gh/hishis/forum-master/public/images/patch.gif
页:
[1]