2015-08-09 96 views
0

我可能錯過了這裏非常基本的東西,但這裏有:re.findall在控制檯中工作,但不是在腳本中?

我使用Python 2.7和正則表達式來識別字符串中的數字。

在控制檯中,我輸入:

>>> newstr = 'NukeNews/File_132.txt' 
>>> int(re.findall(r'\d+',newstr)[0]) 
132 

這是我的期望。

但是,在我運行的腳本中,我將字符串存儲在字典linedict中。我運行此腳本:

news_id=[] 

for line in line_vec: 
    print linedict[line] 
    newstr= linedict[line] 
    id_int = re.findall('r\d+',newstr) 
    print id_int 
    news_id.append(id_int) 

這是一個長長的名單,但輸出的樣子:

NukeNews/File_132.txt 
[] 

所以 - 正確的字符串被註冊,但它不能在任何匹配。

我之前調用了列表中的第一項(匹配int(re.findall(r'\d+',newstr)[0])的控制檯輸入,但腳本告訴我正則表達式沒有在字符串中找到任何數字的實例,我期望這個返回:?
NukeNews/File_132.txt [「132」]

任何想法,爲什麼它如預期不工作,當我嘗試運行re.match(r'/d+',newstr)我也得到一個空的組(以下上https://docs.python.org/2/library/re.html組爲例)

編輯:正如指出的,t他是一個不小心'r'r'*'的情況。我只是爲了防止其他人在Google上搜索「爲什麼我的正則表達式在控制檯中工作,而不是在腳本中工作」,忘記檢查這個錯字,就像我一樣。

回答

2

你有你的r引號內這樣反而得到一個「原始字符串」的你要在它的'r'串...

id_int = re.findall('r\d+',newstr) 
#     ^
# should be: 
id_int = re.findall(r'\d+',newstr) 

你的「控制檯」的版本也只將第一個找到的匹配與附加整個列表的「腳本」版本進行比較。

+0

哦,這就是令人生厭的。謝謝。這正是問題所在。 :) – zainksasdf

相關問題