2016-11-14 36 views
0

所以目前我已經得到了串Python和正則表達式查找號碼長度的5

'JavaScript:doEdit('41228', '', '', 2);' 

我想要做的正則表達式中的巨蟒就可以過濾出的41228.我試過兩種方法,並提出了兩個問題。第一次是試圖通過使用

re.sub('^\d{5}', string) 

找到的東西並不長度爲5位數然後我試圖re.match和re.compile它給我的錯誤類型錯誤:不支持的操作類型爲&: 'str'和'int'。

我已經完成的唯一一件事就是使用re.sub {'\ D',string},但是它會粘在額外的2我不想要的。

我想這不會是一個問題,只是找到字符串中的第19至第24個字符。因爲字符串不應該改變組成。當我生成一個新的ID。

解決的:工作的代碼是

screen_id = 'JavaScript:doEdit('41228', '', '', 2);' 
reduced_screenc_id = re.search(r'\d{5}', screenc_id) 
print (reduced_screenc_id.group()) 
+1

'^'僅在字符串的開始處使模式匹配。 –

+0

哈哈。我明白了。這就是爲什麼我在這裏要求做什麼。 –

+1

你可以使用're.search(r「'(\ d +)'」,s)'(如果's'是一個字符串)並獲取'group(1)'值。或者用'''分割並得到第二個項目。看到https://ideone.com/HMyRcw –

回答

3

使用re.findall找到模式的所有(非重疊)的實例在你的字符串:

>>> import re 
>>> string = "JavaScript:doEdit('41228', '', '', 2);" 
>>> pattern = '\d{5}' # 5 digits 
>>> number = re.findall(pattern, string)[0] 
>>> number 
'41228' 

你可能想投的「數字」然後使用number = int(number)轉換爲實際數字。

0

如果你的字符串始終以這種格式,你可以使用一個單純的分割操作與'

s = "JavaScript:doEdit('41228', '', '', 2);" 
print(s.split("'")[1]) 
# => 41228 

如果您計劃學習正則表達式,你可以使用re.search與任何\d{5}doEdit'(\d{5})'正則表達式。

import re 
s = "JavaScript:doEdit('41228', '', '', 2);" 
res = re.search(r"\d{5}", s) 
if res: 
    print(res.group()) # Here, we need the whole match 
res = re.search(r"doEdit\('(\d{5})'", s) 
if res: 
    print(res.group(1)) # Grabbing Group 1 value only 

由於您只需要第一個匹配,所以使用re.findall沒有意義。

參見this Python demo