如何从字符串中提取疑问句

How to extract a interrogation sentence from a string

我有一个字符串。例如:

"This is a string.Is this a question?What is the Question? I Dont know what the question is. Can you please list out the question?" 我想使用正则表达式从本文中提取问题

我试过的

re.findall(r'(how|can|what|where|describe|who|when)(.*?)\s*\?',message,re.I|re.M))

但它也给出了其他的东西,如果我提出问题,它会将(如何,什么等)和问题的其余部分分开

对于上面的例子,我的输出是

[('is', ' is a string.Is this a question'), ('What', ' is the Question'), ('what', ' the question is. Can you please list out the question')]

我希望整个问题放在一起。

要将整个问题放在一起,您应该将整个模式括在括号中。

这是另一个简化版本:

\b([A-Z][^.!]*[?])

判断一个句子是否为疑问句时搜索关键词是完全不切实际的。鉴于你的列表:how|can|what|where|describe|who|when,我可以轻松写出包含这些词之一的句子,这不是问题!

您可以通过多种方式来匹配句子。比如以this为基线:

^\s*[A-Za-z,;'"\s]+[.?!]$

我们可以先修改它以匹配同一字符串中的多个句子:

(^|(?<=[.?!]))\s*[A-Za-z,;'"\s]+[.?!]

这使用 look-behind 来确保一个句子刚刚结束(除非我们在字符串的开头)。

然后调整为只匹配以?:

结尾的句子
(^|(?<=[.?!]))\s*[A-Za-z,;'"\s]+\?

Here is an online demo 我的正则表达式,在你的原始字符串上。

谢谢你帮助我 答案由@Fredrik 提供 可以在这里找到 https://regex101.com/r/rT1mQ0/2

\s*([^.?]*(?:how|can|what|where|describe|who|when)[^.?]*?\s*\?)