假设我们有以下字符串:“ 1。句子1.句子2?句子3!”。 我将如何寻找(并作为字符串返回)匹配以下所有情况的模式:
"1. Sentence 1."
"1. Sentence 1. Sentence 2?"
"1. Sentence 1. Sentence 2? Sentence 3!"
图案前面总是有一个数字, 但后面可能有任意数量的句子。 到目前为止,我尝试过的是
pattern = re.compile("\d.(\s[A-Ö][^.!?]+[.!?])+?")
和
assignmentText = "".join(pattern.findall(assignment))
其中join
方法是一个丑陋的黑客手段,用于从findall
返回的列表中提取字符串,因为list[0]
似乎不起作用(我知道只会是列表中的单个str
)。
但是,我只收到第一句话,前面没有数字。
如何解决?
答案 0 :(得分:1)
您可以使用(?:(?:\d+\.\s+)?[A-Z].*?[.!?]\s*)+
。
import re
print(re.findall(r'(?:(?:\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!']