Python基于正则表达式拆分字符串

100 python regex split

"HELLO there HOW are YOU"大写单词一样拆分字符串的最佳方法是什么(在Python中)?

所以我最终得到一个像这样的数组: results = ['HELLO there', 'HOW are', 'YOU']


编辑:

我试过了:

p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用.

Ωme*_*ega 114

我建议

l = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(s)
Run Code Online (Sandbox Code Playgroud)

查看此演示.

  • 不使用compile时会发生什么? (5认同)
  • 根据[re docs](https://docs.python.org/2/library/re.html),“ *大多数正则表达式操作都可以作为模块级函数和RegexObject方法使用。这些函数是不具有t要求您先编译一个regex对象,但是会错过一些微调参数。*“您可以使用`re.split(re.split(pattern,string,maxsplit = 0,flags = 0))`,先前引用的文档。 (2认同)

Mar*_*der 44

您可以使用前瞻:

re.split(r'[ ](?=[A-Z]+\b)', input)
Run Code Online (Sandbox Code Playgroud)

这将在每个空格处分开,后面跟着一串以字边界结尾的大写字母.

请注意,方括号仅用于提高可读性,也可以省略.

如果一个单词的第一个字母大写就足够了(所以如果你想在前面分开Hello),它会变得更容易:

re.split(r'[ ](?=[A-Z])', input)
Run Code Online (Sandbox Code Playgroud)

现在,这会在每个空格处分开,然后是任何大写字母.

  • 我建议至少`[] +`或甚至`\ W +`来捕获更多的情况.还是,一个很好的答案. (2认同)

geo*_*org 14

你不需要拆分,而是findall:

 re.findall(r'[A-Z]+[^A-Z]*', str)
Run Code Online (Sandbox Code Playgroud)

  • @ m.buettner:嗯,"word"作为"在'\ b`之间"的东西"仅适用于(某些子集)英语.自然语言标记化是一个复杂的问题,单靠正则表达式无法解决.除非你想出一个能够以明确的方式匹配"co-coalgebra","O'Hara"或"N/A"的表达,否则我拒绝讨论任何有关"单词"的问题. (3认同)
  • 它以连续的大写字母而不是大写字母分裂 (2认同)
  • @ m.buettner:我不知道你的意思是什么"字". (2认同)