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

Python:返回完整单词,而不仅仅是字符串的特定部分(正则表达式),python,regex,Python,Regex,我最近刚开始学习Python,我已经和正则表达式一样“远”。我的任务似乎相当简单。我只需要编写一个正则表达式,从字符串中返回某些单词。规则如下:单词只能包含一组元音。换句话说,它是一个不完美但简单的正则表达式,用于从文本返回单音节单词 我相信我写的正则表达式并不遥远,但我只得到字符串的一部分,而不是完整的单词。示例如下: >>> import re >>> text = "A boy named Sue tried to kill a swamp monke

我最近刚开始学习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.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\u aeiou]
有点难以理解:

  • \w
    匹配任何字母、数字或下划线
  • \W
    匹配任何
    \W
    不匹配的字符
  • 因此,
    [^\W]
    \W
    匹配。但是我们现在可以向这个否定字符类添加更多的字符,这些字符应该从有效字符集中减去
  • 因此,
    [^\W\d\u aeiou]
    匹配任何
    \W
    匹配的内容,但没有数字、下划线或元音
  • 这种方法的优点(而不是使用
    [bcdfghjklmnpnpqrstvwxyz]
    \w
    支持Unicode(在Python 3中是本机的,如果您添加
    re.U
    标志,则在Python 2中是通过请求的),因此将不限于ASCII字母

如果您添加
re.I
标志,我认为这是完美的!谢谢,这非常有效!如果我不是一个没有信誉点的全新用户,我会投票给您的。@user3280957:不客气。很高兴您在StackOverflow上出现!(小StackOverflow protip:选择一个更好的用户名。我们不是Reddit,也不是幼稚的“幽默”在这里不太合适。)注意到。我试图更改它,但它说我必须等待30天。糟糕。好吧,一个mod可能能够提供帮助,因为你是新来的,今天才第一次更改它…尝试标记帖子,并要求重置你的姓名更改期。我不知道这是否可能,但这将有助于你在社区中的地位,我想。如果失败了,有一个有趣的帖子在上面;不知道这是否仍然有效。。。
>>> 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']