我想确定一个字符串是否是一个问题。我该如何分析“?”符号(python)

时间:2009-11-24 09:44:20

标签: python regex string url

这是一个问题:

"Where is the car?" 

这不是一个问题:

"Check this out: http://domain.com/?q=test"

如何编写一个分析字符串的函数,以便我们确定它是一个问题,而不是 URL的一部分

6 个答案:

答案 0 :(得分:3)

此正则表达式在单词字符后面找到问号,后跟空格或字符串/行的结尾。不完美,但应该抓住大多数情况......

\w\?[$\s]

编辑(缺乏咖啡因罢工......):

应该是:

\w\?(\s|$)

在原文中,$被解释为文字字符。 (感谢Gumbo)

答案 1 :(得分:2)

如果问号始终存在,您可以查看

if question.strip().endswith("?") and "://" not in question:
    # do something ?

如果你真的想解析真正的句子,你可能需要nltk,我不确定那个案例。

p.s这只是一个示例,如果文本被修复,没人能用正则表达式解析真正的英语语法。

答案 2 :(得分:2)

基本上别人说的是正确的。 ?之前不应该有空格。如果问题是由用户输入的,那么事情会变得更加模糊。

在这种情况下,使用无上下文语法的正确解析器可以产生更好的结果。即使问题最后没有问号。但它可能无法识别所有问题。涵盖所有可能的结构变化,变形和诸如此类的东西并不是直接的。

但是,如果您某些问题总是以问号结尾,那么您可以做一些简单的事情

if question_text.strip().endswith("?"):
    print `question_text`, "is a question"

或者:

import re
p = re.compile( r"\w+\?\s*" )
if p.search( question_text ):
    print `question_text`, "contains a question"

未经测试,但在大多数情况下都适用。

答案 3 :(得分:1)

例如,您可以检查问号是否紧跟非空格非换行字符。但我想更安全的方法是在搜索问号之前从字符串中删除任何可能的URL。

答案 4 :(得分:0)

如果问号位于网址中,问号的任意一侧或换行符/换行符后面都不会有空格

答案 5 :(得分:0)

一个可能不太强大的方法,你可以得到一些牵引力,将寻找以问号结尾的字符串中的“问题单词”。在英语中,大多数问题句子或句子(即逗号后面)以“who”,“what”,“where”,“when”,“how”,“why”,“can”,“may”,“will”开头“,”不会,“确实”,“没有”,等等。你可能会以这种方式构建一个非常好的启发式方法,它可能比正则表达式更好(或者可以合并到一个或多个正则表达式中)。 / p>