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

2024-09-30 20:23:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近刚开始学习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.']

正如你所看到的,结果是不正确的。它只是拆分字符串以适合我的正则表达式,而不是返回它来自的单词。此外,返回的一些字符串甚至不是来自符合我条件的单词。在

提前谢谢!在


Tags: to字符串textre规则单词buthe
1条回答
网友
1楼 · 发布于 2024-09-30 20:23:57

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

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)

然后您可以这样使用它:

^{pr2}$

说明:

[^\W\d_aeiou]有点难以理解:

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

相关问题 更多 >