这是一个问题:
"Where is the car?"
这不是一个问题:
"Check this out: http://domain.com/?q=test"
如何编写一个分析字符串的函数,以便我们确定它是一个问题,而不是 URL的一部分?
答案 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>