2009-11-24 19 views

回答

2

如果問號是永遠存在的,你可以檢查像

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

如果你真的想解析真正句話,你可能需要NLTK,我不知道該情況。

p.s這只是一個示例,如果文本是固定的,沒有人可以用正則表達式解析真正的英語語法。

+0

不適用於「這是http://domain.com/?q=test是一個好站點嗎?」 – Burkhard 2009-11-24 09:53:15

+0

那麼,要充分理解英語,有許多事情需要我甚至可以解析這句話,還有很多其他的事情要做,它比用正則表達式解析html,用正則表達式解析英文,這是不可能的,如果你需要覆蓋所有模式。 – YOU 2009-11-24 09:56:15

+0

讓我給你舉個例子,'這個網址是有效的 - http://google.com?' – YOU 2009-11-24 10:02:27

0

問號不會有空格兩側或斷行/一結束串後,如果是在一個URL

1

例如,您可以檢查問號後面緊跟着一個非空格,非換行符。但我想更安全的方法是在搜索其上的問號之前從字符串中去除任何可能的URL。

3

該正則表達式在單詞字符後面查找問號,後面跟着空格或字符串/行的結尾。並不完美,但應該抓住大多數情況下...

\w\?[$\s] 

編輯(缺少咖啡因罷工......):

本來應該:

\w\?(\s|$) 

在原有的$被解釋爲文字字符。 (Thanks Gumbo)

+0

更正:這個正則表達式在**一個**字** **字符後面找到問號** – exhuma 2009-11-24 09:58:03

+0

正確,我的錯字。所有這一切都是爲了排除'懸掛'問號。將更新。 – mavnn 2009-11-24 10:16:31

+0

'[$ \ s]'表示'$'字符或空白字符。 – Gumbo 2009-11-24 10:20:18

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" 

沒有測試,但應該適用於大多數情況。

+0

使用'\ s *'也將不允許任何空格。 – Gumbo 2009-11-24 10:21:03

+0

是的。這是打算這樣。 – exhuma 2009-11-24 13:31:57

0

一個可能不是非常可靠的方法,你可能會得到一些牽引,將尋找以問號結束的字符串中的「問題單詞」。在英語中,大多數問句或條款(即以逗號開頭)以「誰」,「什麼」,「哪裏」,「何時」,「如何」,「爲什麼」,「可以」,「可能」,「將會」,「不會」,「 ,「不」等等。你可以用這種方式建立一個很好的啓發式方法,它可能比正則表達式更好(或者可以合併到一個或多個正則表達式中)。

相關問題