2011-11-07 60 views
0

我有一個正則表達式,應該找到所有的「標題行」,其中包含一些不以句號結束的文本或?或:Python,這個正則表達式應該如何工作

tit_pat = re.compile(r"([\w ]+?)(?![!?.])\n",re.UNICODE) 
res = tit_par.findall(data) 

: 例子:

章1X測試
這是一條測試測試測試測試測試。這與一些文字和更 text.This測試與一些文字和更多的文字一些文字和更多的文字。 這是一些更多的文字一些更多的文字一些更特克一些更多的文字 章aaa
這是一個測試。這與一些文字和更多的文字測試一些文字和更多的文字一些文字和更多的文字一些文字和更多的文字。
bbbb
結束。

正則表達式找到所有包含一些沒有句號和換行的文本的「標題行」。這是預料之中的,因爲有一個(負面)向前看的聲明,在接受之前檢查沒有期間(或!或?)。 但是,我可能有一句話在一行中開始,並以下一行中的句點結束。正則表達式沒有找到沒有句點的文本行。有沒有解釋這種行爲?

回答

1

你的正則表達式的基本意思是「儘量找到儘可能少的單詞,這樣在單詞後面沒有不需要的字符,然後在這些單詞後面立即找到換行符」。單詞檢查部分不會找到不需要的字符,因爲它們不是單詞的一部分,並且前瞻斷言是多餘的,因爲換行符不是不想要的字符。

你似乎想要的是「找到一行,使最後一個字符不是不需要的字符之一」。這可能並不真正需要正則表達式,但是如果您想要使用它們,最明顯的方法是將文本一次一行,然後search用於(?<![.!?])$之類的內容。

+0

我使用正則表達式的原因是我正在讀取一個大文件作爲字符串來執行一些搜索操作。我已經移除了「向前看」,並且它仍然按照預期執行。謝謝Karl Knechtel! – user963386

相關問題