问题:找出夹在两个辅音之间的所有元音(超过2个(。这些元音可以出现在行首或行尾。示例:-
输入:-
abaabaabaabaae
预期输出:-
['aa','aa','aa','aae']
解决方案尝试
import re
pattern=re.compile(r'(?:[^aeiouAEIOU])([AEIOUaeiou]{2,})(?=[^AEIOUaeiou])')
pattern.findall("abaabaabaabaae")
这将输出为[‘aa’,‘aa’和‘aa’],它忽略了‘aae’,原因很明显,因为行尾不是搜索条件的一部分。我怎样才能包括一个包含锚的行尾($(搜索,使它($(是搜索中的OR条件,而不是强制的行尾。
您可以提取正则表达式的匹配项
re'(?<=[b-df-hj-np-tv-z])[aeiou]{2,}(?=[b-df-hj-np-tv-z]|$)'
演示
对于以下字符串,将显示匹配项。
_abaab_aabaabaaeraaa_babaa%abaa
^^ ^^ ^^^ ^^
我发现将辅音与字符类明确匹配是最容易的
[b-df-hj-np-tv-z]
Python演示
我会将re.findall
与模式(?<=[^Waeiou])[aeiou]+(?![aeiou])
:一起使用
inp = "abaabaabaabaae"
matches = re.findall(r'(?<=[^Waeiou])[aeiou]+(?![aeiou])', inp, flags=re.IGNORECASE)
print(matches)
此打印:
['aa', 'aa', 'aa', 'aae']
以下是正则表达式模式的解释:
(?<=[^Waeiou]) assert that what precedes is any word character, excluding a vowel
this also exlcudes the start of the input
[aeiou]+ match one or more vowel characters
(?![aeiou]) assert that what follows is not a vowel (includes end of string)