寻找正则表达式模式以捕获短语直到点

时间:2019-04-12 20:09:38

标签: python regex lookahead

我有一长串这样的文字:

text = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'

我想得到这个输出:

phrases = ['Quisiera yo detectar los puntos... pero solo los puntos aislados.',
' Los puntos suspensivos no los quiero detectar.',
' A eso me refiero.']

问题在于第一个短语中的三个点。我找不到将它们与常见的单点分隔符区分开的正则表达式。有没有办法用正则表达式来实现?

3 个答案:

答案 0 :(得分:5)

您想以不同的方式处理..(或...等),并将其与否定的前瞻相结合:

(?:[^.]|\.{2,})+\.

说明:

  • (?:[^.]|\.{2,})+将匹配任何由非.个字符组成的字符串或由2个或更多.组成的
  • \.当然需要一个时间段

这里是demo

答案 1 :(得分:3)

您可以使用正向后视来仅在不超过一个点的空白处进行分割。这种方法将忽略2个或更多点的任何序列。

例如:

import re

s = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'

sentences = re.split(r'(?<=[^.]\.)\s', s)
print(sentences)
# ['Quisiera yo detectar los puntos... pero solo los puntos aislados.', 'Los puntos suspensivos no los quiero detectar.', 'A eso me refiero.']

答案 2 :(得分:1)

尝试一下...

import re

text = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'

pattern = r"(?<=\.)\s(?=[A-Z])"
re.split(pattern, text)

结果应该是...

['Quisiera yo detectar los puntos... pero solo los puntos aislados.',
 'Los puntos suspensivos no los quiero detectar.',
 'A eso me refiero.']

我的答案基于this SO answer

更新
使用regex标签浏览了一些答案,我遇到了这个metadiscussion和这个answer。我的回答并非来自于对正则表达式的先天知识,而是来自花费约17分钟的时间来搜索不同的搜索词并在Stack Overflow上乱拨。在随后的17分钟左右的时间里,我花了我一些时间才能回答其他两个问题。
我意识到我的答案更多是“向我展示代码”而不是“教人钓鱼”之类的答案。我的底线是我说,当我急需帮助时,我希望有人向我展示代码。但是,能够通过谷歌搜索解决问题的方法是一项重要技能,也是一种可怕的药物。希望我的解决方案有所帮助,但我也强烈建议您查看更新中的链接。对于regex标签的状态以及使堆栈溢出更有意义的观点,是否有任何意义。