2015-12-21 42 views
2

我想使用正則表達式搜索文件的內容。該文件的示例是:正則表達式與崇高的文本搜索,但不是從Python腳本

3 General 24 
3.1 CR IOT133 (ID: 194) 24 
3.1.1 Issue 24 
4 Integration 25 
4.11 CR IOT025 (ID: 125) 25 
10.27 CR IOT111 (ID: 176) 77 

我要提取的IOTxxx部分(以使行2,5和6在此實例中)

我的腳本是:

import re 
fhandle = open("CR_headers.txt") 
inp = fhandle.read() 
crnumlist = re.findall('^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', inp) 
print crnumlist 

的last語句打印一個空的列表。我試着從控制檯運行它,但結果是一樣的。

如果我使用sublime text找到輸入:^\d{1}\.\d{1} CR (IOT\d{3}).*$ 我可以得到匹配的行。

在Windows使用Python版本2.7.10和崇高的文本2 7箱

上,我做錯了什麼,將不勝感激任何想法。 Thanx

+0

如果我使用crnumlist = re.findall('\ d {1,2} \ \ d {1,2} CR(IOT \ d {。 3})',inp)它的工作原理,但我仍想理解第一個問題。 – mariap

+0

這裏是否需要'regex'? –

回答

2

您只需要包含多行修飾符並將您的正則表達式定義爲原始字符串。滿足這兩個條件時,您必須使用多行修飾符。

  • 每當錨^$在您輸入的正則表達式中使用。
  • 而且當輸入字符串包含多行。

    crnumlist = re.findall(r'(?m)^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', inp) 
    

實施例:

>>> s = '''3 General 24 
3.1 CR IOT133 (ID: 194) 24 
3.1.1 Issue 24 
4 Integration 25 
4.11 CR IOT025 (ID: 125) 25 
10.27 CR IOT111 (ID: 176) 77''' 
>>> re.findall(r'(?m)^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', s) 
['IOT133', 'IOT025', 'IOT111'] 
>>> re.findall(r'^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', s) 
[] 
+0

非常簡單,感謝您的幫助! – mariap

相關問題