2013-05-01 54 views
2

所以我匹配(含實物捐助者的幫助下對堆棧溢出)的項目數:在使用變量REG-EX

User Number 1 will probably like movie ID: RecommendedItem[item:557, value:7.32173]the most! 

現在我想從另一個文本文件中提取相應的名稱使用項目編號。它的內容如下:

557::Voyage to the Bottom of the Sea (1961)::Adventure|Sci-Fi 

由於某種原因,我只是在終端上提出'無'。找不到匹配項。

myfile = open('result.txt', 'r') 
myfile2 = open('movies.txt', 'r') 
content = myfile2.read() 
for line in myfile: 
    m = re.search(r'(?<=RecommendedItem\[item:)(\d+)',line) 
    n = re.search(r'(?<=^'+m.group(0)+'\:\:)(\w+)',content) 
    print n 

我不知道如果我能在後面的斷言來看看使用變量.. 真的很感激我得到這裏的幫助!

編輯:原來唯一的問題是第二個正則表達式中不需要的脫字符號。

+1

在這裏工作(CPython的2.6.2),您使用的是什麼版本? 'python example.py Voyage' – AlessandroEmm 2013-05-01 09:09:20

+0

我有Python 2.7.2 ... – Siddhartha 2013-05-01 09:15:08

+1

檢查你的輸入。您的代碼適用於我([Ideone示例](http://ideone.com/mD87Gp))。 – soon 2013-05-01 09:15:58

回答

1

在這裏,一旦找到了數字,就可以使用'舊式'(如果需要,可以同樣使用.format)字符串格式將其放入正則表達式中。我認爲通過字典訪問這些值是很好的,因此命名的匹配,你可以做到這一點,但沒有。要獲得流派的列表,只需.split("|")下的字符串suggestionDict["Genres"]

import re 
num = 557 
suggestion="557::Voyage to the Bottom of the Sea (1961)::Adventure|Sci-Fi" 

suggestionDict = re.search(r'%d::(?P<Title>[a-zA-Z0-9 ]+)\s\((?P<Date>\d+)\)::(?P<Genres>[a-zA-Z1-9|]+)' % num, suggestion).groupdict() 
#printing to show if it works/doesn't 
print('\n'.join(["%s:%s" % (k,d) for k,d in suggestionDict.items()])) 
#clearer example of how to use 
print("\nCLEAR EXAMPLE:") 
print(suggestionDict["Title"]) 

Prodcuing

Title:Voyage to the Bottom of the Sea 
Genres:Adventure|Sci 
Date:1961 

CLEAR EXAMPLE: 
Voyage to the Bottom of the Sea 
>>> 
+0

非常感謝Henry對我的兩個問題的幫助。我雖然得到它的工作,只是不需要脫字符號。 – Siddhartha 2013-05-01 09:28:41

+1

確實的隊友,樂於幫助。儘管出於興趣,胡蘿蔔代表什麼意思? – HennyH 2013-05-01 09:39:43

+0

我在第二個reg-ex中使用的「^」符號。 – Siddhartha 2013-05-01 09:41:38