在Python正则表达式中重新计算字符

在Python正则表达式中重新计算字符,python,regex,python-3.x,Python,Regex,Python 3.x,对于python中下面的正则表达式。它以2的形式给出输出。但是,输出应该是4。我想找出前后有辅音的元音出现的次数。但是。如果有一个元音,它将跳过下一个辅音 例如: 在“lololol”中。 从指数(0,2)来看,我的条件是满意的。然后它将移动到索引3。但是,我想再次使用regex检查前面的索引值,即来自2的索引值。它是如何完成的是python regex。下面是我的代码: p=re.findall(')(?您应该首先了解正则表达式在做什么 它将第一个l与[b-df-hj-np-tv-z]匹配,然

对于python中下面的正则表达式。它以
2
的形式给出输出。但是,输出应该是
4
。我想找出前后有辅音的元音出现的次数。但是。如果有一个元音,它将跳过下一个辅音

例如: 在“lololol”中。
从指数(0,2)来看,我的条件是满意的。然后它将移动到索引3。但是,我想再次使用regex检查前面的索引值,即来自2的索引值。它是如何完成的是python regex。下面是我的代码:


p=re.findall(')(?您应该首先了解正则表达式在做什么

它将第一个
l
[b-df-hj-np-tv-z]
匹配,然后将元音
o
[aeiou]
匹配,然后将以下
l
[b-df-hj-np-tv-z]
匹配。找到并返回匹配项。索引位于第二个
o
。此
o
无法与
[b-df-hj-np-tv-tv-z]匹配
,因此,匹配失败,索引移动到下一个
l
。找到匹配:
lol
。然后再次
o
无法匹配,然后
lo
不匹配,因为那里没有最后的第三个字符

您只需使用前瞻
(?=[b-df-hj-np-tv-z])
而不是
[b-df-hj-np-tv-z]
,以便只检查字符而不使用字符:

这样,尾随的“音节”边界将被检查,但不会被使用,并且可以在下一个正则表达式迭代期间进行测试


这是一篇必读的文章,内容是关于如何做的。

你比我强seconds@SIslam幸运的是:我是一个无神论者,不相信命运!为什么不摆脱落后的想法呢?应该足够了。@vks:我正在更新你的答案,以弥补被接受的分数。不过,你提供了一个有效的解决方案。请检查我的答案。你根本不需要落后的想法在这种情况下。
p = re.findall('[b-df-hj-np-tv-z][aeiou][b-df-hj-np-tv-z]','lolololol',re.IGNORECASE)
print(len(p))
p = re.findall('(?<=[b-df-hj-np-tv-z])[aeiou](?=[b-df-hj-np-tv-z])','lolololol',re.IGNORECASE)
print(len(p))
import re
p = re.compile(r'[b-df-hj-np-tv-z][aeiou](?=[b-df-hj-np-tv-z])') 
#                                        ^^^                 ^ 
test_str = "lolololol"
print(p.findall(test_str))
print(len(p.findall(test_str)))