Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 寻找一个正则表达式模式来捕获短语直到点_Python_Regex_Lookahead - Fatal编程技术网

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

Python 寻找一个正则表达式模式来捕获短语直到点,python,regex,lookahead,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

我有一段很长的文字如下:

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,})+
    将匹配由非
    字符或2个或更多
    字符组成的任何字符串
  • \。
    当然需要一段时间

这里有一个。

您希望以不同的方式处理
(或
,等等),并将其与负面前瞻相结合:

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

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

这里有一个。

您可以使用正向查找来只拆分前面不超过一个点的空白。这种方法将忽略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.']
重新导入
s='Quisiera yo detectar los puntos。。。这是一个独奏曲。不,不,不,不。一个eso-me refiero。”

句子=re.split(r’(?您可以使用正向查找来只拆分前面没有多个点的空白。这种方法将忽略任何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.']
重新导入
s=‘你可以在平托星上发现……你可以在平托星上独奏。你可以在悬念星上发现,你不能在安静的状态下发现。你可以在这里看到我。’
句子=re.split(r’(?试试这个

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)
我的答案是基于

更新:
使用
regex
标记查看一些答案时,我遇到了这个和这个。我的答案不是来自正则表达式的固有知识,而是花了17分钟左右的时间在谷歌上搜索不同的搜索词并搜索堆栈溢出。在这17分钟左右的时间里,我花了17分钟左右的时间设计了一个回答:另外两个答案出现了。
我意识到我的答案更多的是“给我看代码”,而不是“教人钓鱼”这算是一种回答。我的观点是,当我急需帮助时,我希望有人能给我看代码。但能够通过谷歌搜索问题的解决方案是一项重要的技能,但也是一种可怕的药物。希望我的解决方案有所帮助,但我也强烈建议查看更新中的链接。如果有什么需要的话关于
regex
标记状态的透视图,以及关于使堆栈溢出更有意义的透视图。

试试这个

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)
我的答案是基于

更新:
使用
regex
标记查看一些答案时,我遇到了这个和这个。我的答案不是来自正则表达式的固有知识,而是花了17分钟左右的时间在谷歌上搜索不同的搜索词并搜索堆栈溢出。在这17分钟左右的时间里,我花了17分钟左右的时间设计了一个回答:另外两个答案出现了。

我意识到我的答案更多的是“给我看代码”,而不是“教人钓鱼”这算是一种回答。我的观点是,当我急需帮助时,我希望有人能给我看代码。但能够通过谷歌搜索问题的解决方案是一项重要的技能,但也是一种可怕的药物。希望我的解决方案有所帮助,但我也强烈建议查看更新中的链接。如果有什么需要的话关于
regex
标记状态的透视图,以及关于使堆栈溢出更有意义的透视图。

这种方法与
re.findall
配合得很好。例如:
re.findall(r'(?:[^.]\.{2,})+\.,text)
这是我首选的解决方案,因为它不会对句点后的字符进行假设。因此,如果缺少空格或存在某种类型的标点符号,正则表达式仍然可以工作。这种方法与
re.findall
很好地配合使用。例如:
re.findall(r'(?:[^.]\.{2,})+\.,text)
这是我首选的解决方案,因为它不会对句点后的字符进行假设。因此,如果缺少空格或存在某种类型的标点符号,则正则表达式仍然有效。