【发布时间】:2012-09-24 04:36:42
【问题描述】:
我正在设计一个正则表达式来拆分给定文本中的所有实际单词:
输入示例:
"John's mom went there, but he wasn't there. So she said: 'Where are you'"
预期输出:
["John's", "mom", "went", "there", "but", "he", "wasn't", "there", "So", "she", "said", "Where", "are", "you"]
我想到了这样的正则表达式:
"(([^a-zA-Z]+')|('[^a-zA-Z]+))|([^a-zA-Z']+)"
在 Python 中拆分后,结果包含None 项和空格。
如何去掉 None 项?为什么空格不匹配?
编辑:
在空格上拆分,将给出如下项目:["there."]
并且拆分非字母,将给出如下项目:["John","s"]
除了' 之外的非字母拆分,将给出如下项目:["'Where","you'"]
【问题讨论】:
-
为什么必须是
split而不是findall? -
在这里定义要匹配的内容要简单得多:
findall和r"[a-zA-Z]+(?:'[a-z])?"可以完成这项工作。所以我真的很好奇想要split的原因。 -
另一个错误修复更新。现在它可以捕获单个字母,在开头或结尾加上撇号。
-
@ChrisWesseling 是的,我认为这更容易,谢谢!