Python regex如何在一个数字后查找任意数量的句子?

2024-09-26 17:36:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • "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)。 但是,我只收到第一句话,前面没有数字

怎么能修好呢


Tags: 字符串re列表模式情况数字sentence形式
1条回答
网友
1楼 · 发布于 2024-09-26 17:36:46

您可以使用(?:(?:\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!']

相关问题 更多 >

    热门问题