python正则表达式查找文本中的所有单词

时间:2013-01-03 11:38:25

标签: python regex

这听起来很简单,我知道,但由于某种原因,我无法得到我需要的所有结果

在这种情况下,Word是任何字符,但白色空间与白色空间分开 例如,在以下字符串中:“Hello there stackoverflow。” 结果应该是:['Hello','there','stackoverflow。']

我的代码:

import re

word_pattern = "^\S*\s|\s\S*\s|\s\S*$"
result = re.findall(word_pattern,text)
print result

但是在像我所示的字符串上使用这个模式之后,它只将第一个和最后一个单词放在列表中而不是单词用两个空格分隔

这种模式有什么问题?

4 个答案:

答案 0 :(得分:5)

改为使用\b边界测试:

r'\b\S+\b'

结果:

>>> import re
>>> re.findall(r'\b\S+\b', 'Hello there StackOverflow.')
['Hello', 'there', 'StackOverflow']

或者根本不使用正则表达式而只使用.split();后者包含在句子中的点状(上面的正则表达式与句子中的.不匹配)。

答案 1 :(得分:2)

查找字符串中的所有单词最好使用split

>>> "Hello there stackoverflow.".split()
['Hello', 'there', 'stackoverflow.']

但是如果必须使用正则表达式,那么您应该将正则表达式更改为更简单,更快速的内容:r'\b\S+\b'

  • r将字符串转换为“原始”字符串。这意味着它不会逃避你的角色。
  • \b表示边界,即空格,换行符或标点符号。
  • \S你应该知道,是否有任何非空白角色。
  • +表示之前的一个或多个。

所以它一起意味着找到所有可见的字符集(单词/数字)。

答案 2 :(得分:0)

如何简单地使用 -

>>> s = "Hello there stackoverflow."
>>> s.split()
['Hello', 'there', 'stackoverflow.']

答案 3 :(得分:0)

其他答案都很好。根据您的需要(例如,包括/排除标点符号或其他非单词字符),替代方法可以是使用正则表达式按一个或多个空白字符进行拆分:

re.split(r'\s+', 'Hello there   StackOverflow.')
['Hello', 'There', 'StackOverflow.']