Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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_Python 3.x_Pattern Matching - Fatal编程技术网

Python正则表达式-如何在数字后查找任意数量的句子?

Python正则表达式-如何在数字后查找任意数量的句子?,python,regex,python-3.x,pattern-matching,Python,Regex,Python 3.x,Pattern Matching,假设我们有以下字符串:“1.句子1.句子2?句子3!”。 如何查找(并以字符串形式返回)匹配以下所有情况的模式: “1.第1句。” “1.句子1.句子2?” “1.句子1.句子2?句子3!” 图案前面总是有一个数字, 但后面可能有任意数量的句子。 到目前为止,我所尝试的是 pattern = re.compile("\d.(\s[A-Ö][^.!?]+[.!?])+?") 及 其中,join-方法是一个丑陋的黑客,用于从findall返回的列表中提取字符串,因为list[0]似乎不起

假设我们有以下字符串:“1.句子1.句子2?句子3!”。 如何查找(并以字符串形式返回)匹配以下所有情况的模式:

  • “1.第1句。”
  • “1.句子1.句子2?”
  • “1.句子1.句子2?句子3!”
图案前面总是有一个数字, 但后面可能有任意数量的句子。 到目前为止,我所尝试的是

pattern = re.compile("\d.(\s[A-Ö][^.!?]+[.!?])+?")   

其中,
join
-方法是一个丑陋的黑客,用于从
findall
返回的列表中提取字符串,因为
list[0]
似乎不起作用(我知道列表中只有一个
str
)。 然而,我只收到第一句话,前面没有数字

如何解决这个问题?

您可以使用
(?:\d+\.\s+)[A-Z].?[.!?]\s*)+

这将产生:

['1. Sentence 1. Sentence 2? Sentence 3!']
['1. Sentence 1.', 'Sentence 2?', 'Sentence 3!']
或者,如果您喜欢将它们作为列表中的3个不同项目分开:

import re
print(re.findall(r'(?:(?:\d+\.\s+)?[A-Z].*?[.!?])', '1. Sentence 1. Sentence 2? Sentence 3!'))
这将产生:

['1. Sentence 1. Sentence 2? Sentence 3!']
['1. Sentence 1.', 'Sentence 2?', 'Sentence 3!']

您的意思是将大写字母与
[A-Ö]
匹配吗?请发布您的预期输出。预期输出是问题中列出的字符串之一。至于@Wiktor Stribiżew的问题,是的,我希望句子在语法上正确,因为第一个字母应该大写。这似乎成功了。然后我可以使用
join
提取实际字符串。请注意
[A-Z]
只匹配ASCII大写字母。