2012-01-14 189 views
1

我有一個正則表達式的小問題。Python的正則表達式和多次查找

我想在我的文本中找到所有「文章」內容。 在兩篇文章之間可能會有「章節」,但現在我通過它。

這裏是我的文字(沒有\ n):

章1Lorem存有悲坐阿梅德,diamArticle 1Maecenas ligula馬薩, VARIUS一個,森佩爾congue,euismod非,MI。 Proin porttitor第2章 arcu in pede第2條現代布蘭迪特第3條佩蘭提斯 sed dui ut augland blandit sodales。前庭賭注存有primis在 faucibus奧奇luctus等ultrices posuere cubilia Curae

爲了讓多個比賽,我想我必須使用的findAll()。 但是我的小正則表達式是不工作:

re.findall(r"""Article\s(?P<number>\d+)(?P<content>.*)""",content,re.UNICODE) 

內容 PARAM把我的所有文本。我認爲這是因爲有。* 那麼,正則表達式在我的文本中如何匹配多次? 我不必使用findall()或我的正則表達式無效?

所以如果有人有一個想法, 謝謝。

ps:我想要這樣做只能通過使用正則表達式來進步。

回答

2

你需要吞下一切,直到找到Article\s或輸入結束。這可以通過使用一個懶惰的量詞後跟一個正先行試驗來完成:

re.findall(r"""Article\s(?P<number>\d+)(?P<content>.*?)(?=Article\s|$)""",content,re.UNICODE) 

另一種解決方案是拆分對Article\s,但隨後你需要放棄分裂第一組。除了第一個分開的每個分組,然後將服從:

^(?P<number>\d+)(?P<content>.*)$ 
0

re.findall是確定的。您可以從所有匹配中提取文本組。

您還可以看到this示例。