2016-01-27 21 views
0

我在嘗試以下操作:從每篇文章中打印僅位於第4行或第5行的月份。我試圖這樣做的方式是:以前指定的列表中的正則表達式

m = 'January', 'February', 'March', 'April', 'May' 'June', 'July', 'August', 'September', 'October', 'Novemeber', 'December' 

for i in range(len(sections)): 

     date = re.search(r"[m]",sections[i][1:5]) 

     print(date) 

第一個問題。我不知道如何在我的列表「m」中搜索正則表達式。第二個問題,我想僅將搜索的重點放在每篇文章的第0-5行。

+0

'r「[m]」'只是要搜索集合中的其中一個字符,也就是'm'。搜索任何你想要的一組字符串'String1 | String2 | etc' ... https://docs.python.org/2/library/re.html – whrrgarbl

+0

@minitoto這是一個元組,它應該工作正常。 – DJMcMayhem

+0

你還在尋找哪些線?你說「第4或第5」,你的數組索引是[[1:5]',然後你說「第0-5行」)... – whrrgarbl

回答

2

考慮:

>>> txt='''\ 
... Line 1 
... Line 2 
... Line 3 
... Line 4 
... Line 5 April''' 

你可以得到i通過j符合.splitlines()[i:j]

>>> txt.splitlines()[0:3] 
['Line 1', 'Line 2', 'Line 3'] 

現在只是構建找到個月的模式。一定要使用\b找到全字匹配:

>>> months=['January', 'February', 'March', 'April', 'May' 'June', 'July', 'August', 'September', 'October', 'Novemeber', 'December'] 
>>> pat=re.compile("|".join([r"\b{}\b".format(m) for m in months]), re.M) 

然後用你的模式在目標線切片搜索:

>>> pat.search("\n".join(txt.splitlines()[0:5])) 
<_sre.SRE_Match object at 0x107a2a9f0> 

如果你想捕捉它出現就行了,你可能這樣做THIS

+0

,非常感謝! –

1

這要看的是,我承擔什麼部分是一個多行字符串:

import re 

sections = 'some sections here' 
dates = re.findall('\\b'+'\\b|\\b'.join(m), ' '.join(sections.splitlines()[0:4])) 
+0

如果沒有'\ b',這將匹配「Marching」和「Maya」,「Mayacaceae」,「Marchmont」和「Julyflower」以及「Juneberry」等。你需要'\ b'在任一端,特別是末端。 – dawg

+0

@dawg好點,我補充bounderies – tinySandy