python-regex:将行尾视为搜索中的OR条件,类似于字符类中的字符



问题:找出夹在两个辅音之间的所有元音(超过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)

相关内容

  • 没有找到相关文章

最新更新