0

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

在这种情况下,单词是任何字符,但空格是用空格分隔的,例如在以下字符串中:“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

4 回答 4

6

改用\b边界测试:

r'\b\S+\b'

结果:

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

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

于 2013-01-03T11:40:01.940 回答
2

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

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

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

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

因此,这意味着找到所有可见的字符集(单词/数字)。

于 2013-01-03T11:39:51.013 回答
0

如何简单地使用 -

>>> s = "Hello there stackoverflow."
>>> s.split()
['Hello', 'there', 'stackoverflow.']
于 2013-01-03T11:40:51.313 回答
0

其他答案都很好。根据您想要的(例如,包括/排除标点符号或其他非单词字符),另一种方法是使用正则表达式来分割一个或多个空白字符:

re.split(r'\s+', 'Hello there   StackOverflow.')
['Hello', 'There', 'StackOverflow.']
于 2013-01-03T11:45:35.477 回答