我有一长串这样的文字:
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.']
问题在于第一个短语中的三个点。我找不到将它们与常见的单点分隔符区分开的正则表达式。有没有办法用正则表达式来实现?
答案 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
标签的状态以及使堆栈溢出更有意义的观点,是否有任何意义。