Python regex-如何在数字后寻找任意数量的句子?

时间:2018-07-06 14:44:11

标签: python regex python-3.x pattern-matching

假设我们有以下字符串:“ 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)。 但是,我只收到第一句话,前面没有数字。

如何解决?

1 个答案:

答案 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!']