繁体   English   中英

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

[英]python regex find all words in text

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

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

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

这种模式有什么问题?

请使用\\b边界测试:

r'\b\S+\b'

结果:

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

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

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

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

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

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

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

简单使用-

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

其他答案很好。 根据您想要的内容(例如,包含/排除标点符号或其他非单词字符),另一种选择是使用正则表达式将一个或多个空格字符分开:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM