寻找用于捕获短语直到点的正则表达式模式
Looking for a regex pattern for capturing phrases until dot
我有一个像这样的长文本:
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.']
问题是第一个短语中的三个点。我找不到将它们与常见的单点分隔符区分开来的正则表达式。有没有办法用正则表达式实现它?
您想以不同的方式处理 ..
(或 ...
等)并将其与否定前瞻相结合:
(?:[^.]|\.{2,})+\.
解释:
(?:[^.]|\.{2,})+
将匹配任何由非 .
字符组成的字符串 or 组 2 个或更多 .
s
\.
当然需要句号
这是 demo。
您可以使用正后视来仅在前面没有超过一个点的空白处进行拆分。这种方法会忽略任何 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.']
试试这个...
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 as well as this answer。我的答案并非来自对正则表达式的先天知识,而是来自花费大约 17 分钟的时间在谷歌上搜索不同的搜索词并浏览 Stack Overflow。在中间的 17 分钟左右,我花了我的时间来制作我的答案,其他两个答案出现了。
我意识到我的答案更像是 "show me the code" 而不是 "teach a man to fish" 之类的答案。最重要的是,我会说,当我急需帮助时,我希望有人向我展示代码。但是能够 google 解决问题是一项重要的技能,但也是一种可怕的药物。希望我的解决方案有所帮助,但我也强烈建议您查看更新中的链接。关于 regex
标记的状态以及使堆栈溢出更有意义的观点。
我有一个像这样的长文本:
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.']
问题是第一个短语中的三个点。我找不到将它们与常见的单点分隔符区分开来的正则表达式。有没有办法用正则表达式实现它?
您想以不同的方式处理 ..
(或 ...
等)并将其与否定前瞻相结合:
(?:[^.]|\.{2,})+\.
解释:
(?:[^.]|\.{2,})+
将匹配任何由非.
字符组成的字符串 or 组 2 个或更多.
s\.
当然需要句号
这是 demo。
您可以使用正后视来仅在前面没有超过一个点的空白处进行拆分。这种方法会忽略任何 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.']
试试这个...
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 as well as this answer。我的答案并非来自对正则表达式的先天知识,而是来自花费大约 17 分钟的时间在谷歌上搜索不同的搜索词并浏览 Stack Overflow。在中间的 17 分钟左右,我花了我的时间来制作我的答案,其他两个答案出现了。
我意识到我的答案更像是 "show me the code" 而不是 "teach a man to fish" 之类的答案。最重要的是,我会说,当我急需帮助时,我希望有人向我展示代码。但是能够 google 解决问题是一项重要的技能,但也是一种可怕的药物。希望我的解决方案有所帮助,但我也强烈建议您查看更新中的链接。关于 regex
标记的状态以及使堆栈溢出更有意义的观点。