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

问题描述 投票:1回答:3

我有这么长的文字:

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.']

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

python regex lookahead
3个回答
5
投票

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

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

说明:

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

这是一个demo


3
投票

您可以使用正向lookbehind仅分割在前面没有多个点的空白处。该方法将忽略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.']

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标签的状态以及使堆栈溢出更有意义的观点有什么。

© www.soinside.com 2019 - 2024. All rights reserved.