gpt4 book ai didi

Python:返回完整的单词而不仅仅是字符串的特定部分(正则表达式)

转载 作者:行者123 更新时间:2023-11-28 21:56:21 25 4
gpt4 key购买 nike

我最近才开始学习 Python,而且我对正则表达式的了解已经“深远”了。我的任务似乎很简单。我只需要编写一个从字符串返回某些单词的正则表达式。规则如下:单词只能包含一组元音。换句话说,它是一个不完美但简单的正则表达式,用于从文本中返回一个音节词。

我相信我写的正则表达式并不太远,但我只得到字符串的一部分,而不是整个单词。示例如下:

>>> import re

>>> text = "A boy named Sue tried to kill a swamp monkey, but failed miserably. He then cried. Boo hoo."

>>> re.findall("[^aeiou][aeiou]{1,}[^aeiou]", text)
['boy', 'nam', 'Sue ', 'ried', 'to ', 'kil', ' a ', 'wam', 'mon', 'key', 'but', 'fail', 'mis', 'rab', 'He ', 'hen', 'ried', 'Boo ', 'hoo.']

如您所见,结果不正确。它只是拆分字符串以适合我的正则表达式,而不是返回它来自的单词。此外,一些返回的字符串甚至不是来自符合我的标准的单词。

提前致谢!

最佳答案

这有点复杂(如果我理解你的要求的话):

regex = re.compile(
r"""\b # Match the start of a word
[^\W\d_aeiou]* # Match any number letters except vowels
[aeiou]+ # Match one or more vowels
[^\W\d_aeiou]* # Match any number letters except vowels
\b # Match the start of a word""",
re.VERBOSE|re.IGNORECASE)

然后你可以像这样使用它:

>>> regex.findall("A boy named Sue tried to kill a swamp monkey, but failed miserably. He then cried. Boo hoo.")
['A', 'boy', 'Sue', 'tried', 'to', 'kill', 'a', 'swamp', 'but', 'He', 'then', 'cried', 'Boo', 'hoo']

解释:

[^\W\d_aeiou]有点难懂:

  • \w 匹配任何字母、数字或下划线。
  • \W 匹配 \w 不匹配的任何字符。
  • [^\W] 因此与 \w 匹配。但是我们现在可以向这个否定的字符类添加更多字符,这些字符应该从有效字符集中减去。
  • [^\W\d_aeiou] 因此匹配 \w 匹配的任何内容,但不包含数字、下划线或元音。
  • 这种方法的好处(而不是使用 [bcdfghjklmnpqrstvwxyz]\w 是 Unicode 感知的(原生在 Python 3 中,如果你在 Python 2 中请求添加 re.U 标志),因此将不限于 ASCII 字母。

关于Python:返回完整的单词而不仅仅是字符串的特定部分(正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21611512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com