2017-06-06 121 views
1

我有一個正則表達式來捕獲文本文件中的文本。正則表達式可以通過以下URL查看: https://regex101.com/r/wwEjTF/1Python正則表達式捕獲問題

在我的python代碼中,我想從文本文件中的所有其他文本中提取正則表達式匹配的文本。 我有以下python代碼匹配th正則表達式並將其存儲在一個變量。

match = re.findall(r'test\s.+\n\sdescription\s\"(.+)\"', text, re.S) 

我期待所有的比賽是在比賽中的變量,並返回一個列表。 但是當我做print (match)我得到空列表。我不明白爲什麼它會出現一個空的列表。我如何捕獲正則表達式的匹配部分到變量中。 感謝您的幫助。 以防萬一,如果有與上述URL的一個問題,是正則表達式和示例文本串:

test\s.+\n\sdescription\s\"(.+)\" 
some random text 
test 111.333.555.666 
    description "text10" 
some random text 
some random text 
test 22.44.55.66 
    description "text12" 
some random text 
some random text 
test 77.77.88.99 
    description "text13" 
some random text 
some random text 
test 14.22.55.99 
    description "text16" 
some random text 
some random text 
test 13.33.55.66 
    description "text17" 
some random text` 
+0

在縮進行的開頭 - 是那些空格或製表符? Python編輯傾向於用4個空格替換標籤。 – Kendas

+0

嘗試省略最後一個're.S'。因爲_re.S 使'。'特殊字符完全匹配任何字符,包括換行符;沒有這個標誌,'。'將匹配除了換行符以外的任何內容._我認爲你的'。+'正在消耗一切。 – Rahul

+0

是的,我已經忽略了're.S'並仍然是同樣的問題。 – frank

回答

0

實施例在regex101使用標籤作爲隔膜description,所以單\s適用於它。與重複替換爲:

match = re.findall(r'test\s.+\n\s+description\s\"(.+)\"', text, re.S) 
+0

是的,這是問題。謝謝 – frank

+1

即使只有最後一組會被捕獲,因爲're.S'會使'。+'消耗所有東西直到最後。 – Rahul

+0

正則表達式並不完美,我只是指出主題啓動器出了什麼問題。其他改進,比如你提到的或者刪除'。+'的確可以應用。 – grundic

1

就像我說在我的評論您忽略了re.S因爲這使得「」特殊字符完全匹配任何字符,包括換行

另外\n\s也不合適。由於\s包含換行符。你將不得不使用\s+

你的正則表達式爲:

match = re.findall(r'test\s.+\s+description\s\"(.+)\"', text) 

Ideone Demo