2011-05-05 83 views
18

我正在解析一個文件並查找username-#的行,其中用戶名將更改,破折號後可以有任意數量的數字[0-9]在Python正則表達式中使用變量

我嘗試過幾乎所有的組合嘗試在正則表達式中使用變量username

我還喜歡re.compile('%s-\d*'%user)嗎?

回答

19

,它應該工作:

>>> user = 'heinz' 
>>> import re 
>>> regex = re.compile('%s-\d*'%user) 
>>> regex.match('heinz-1') 
<_sre.SRE_Match object at 0x2b27a18e3f38> 
>>> regex.match('heinz-11') 
<_sre.SRE_Match object at 0x2b27a2f7c030> 
>>> regex.match('heinz-12345') 
<_sre.SRE_Match object at 0x2b27a18e3f38> 
>>> regex.match('foo-12345') 
+0

我現在覺得很蠢。那麼爲什麼當我嘗試在pdb break中創建它時,它給了我一個語法錯誤 – utahwithak 2011-05-05 16:00:08

+2

What ??????????? – 2011-05-05 16:03:29

+0

在python調試器中,它不會讓我創建它,因爲我正在逐步完成。調試器不是普通的Python解釋器嗎? http://docs.python.org/library/pdb.html – utahwithak 2011-05-05 16:06:33

0

什麼:

re.compile(user + '-\d*') 
+0

這應該與原來的正則表達式有什麼不同? – 2011-05-05 15:55:45

2

你可以使用字符串.format()方法創建的字符串:

re.compile('{}-\d*'.format(user)) 
3

是,串聯你自己的正則表達式,或者使用字符串格式。但是如果你的變量可能包含在正則表達式中有特殊含義的字符,請不要忘記使用re.escape()