Python正则表达式-如何在数字后查找任意数量的句子?
假设我们有以下字符串:“1.句子1.句子2?句子3!”。 如何查找(并以字符串形式返回)匹配以下所有情况的模式: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句。”
“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大写字母。