2012-11-22 65 views
18

我很新的Python和正則表達式(這裏是正則表達式新手),我有以下簡單的字符串:蟒蛇正則表達式:從字符串端到端數字

s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716""" 

我想只提取最後一位數字在上面的字符串,即767980716,我想知道如何使用python正則表達式來實現這一點。

我想做的線沿線的類似的東西:

re.compile(r"""-(.*?)""").search(str(s)).group(1) 

表明我想找到的東西之間(*?),這與開始「 - 」,並在年底結束字符串 - 但這不會返回任何內容..

我想知道是否有人可以指向我在正確的方向.. 謝謝。

回答

26

您可以使用re.match只查找字符:

>>> import re 
>>> s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716""" 
>>> re.match('.*?([0-9]+)$', s).group(1) 
'767980716' 

另外,re.finditer作品一樣好:

>>> next(re.finditer(r'\d+$', s)).group(0) 
'767980716' 

所有的正則表達式組件的說明:

  • .*?a non-greedy match,消耗的位置和位置一樣多ible(貪婪的比賽會消耗除最後一位數字之外的所有內容)。
  • [0-9]\d是捕獲數字的兩種不同方式。請注意,後者也是matches digits in other writing schemes,如୪或2。
  • 括號(())使表達式的內容成爲一個組,可以使用group(1)(或者對於第二組爲2,對於整個匹配爲0)來檢索表達式的內容。
  • +表示多個條目(最後至少有一個數字)。
  • $只匹配輸入的結尾。
3

使用正則表達式如下

\d+$ 

$描述字符串的結尾..

\d是一個數字

+前面的字符1相匹配,多次

4

Regex應該是(\d+)$

  • \d+用於匹配數字
  • $用於匹配在字符串的末尾(一個或多個)。

所以,你的代碼應該是: -

>>> s = "99-my-name-is-John-Smith-6376827-%^-1-2-767980716" 
>>> import re 
>>> re.compile(r'(\d+)$').search(s).group(1) 
'767980716' 

而你並不需要使用這裏str功能,爲s已經是一個字符串。

+2

如果你寫你的正則表達式模式爲'r'(\ d +)$'',那麼你不必逃避反斜槓。 –

+0

@SamMussmann ..是的你是對的。編輯:) –

2

嘗試使用\d+$來代替。它匹配一個或多個數字字符,後跟字符串的結尾。

7

尼斯和簡單與findall

import re 

s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716""" 

print re.findall('^.*-([0-9]+)$',s) 

>>> ['767980716'] 

正則表達式說明:

^   # Match the start of the string 
.*  # Followed by anthing 
-   # Upto the last hyphen 
([0-9]+) # Capture the digits after the hyphen 
$   # Upto the end of the string 

或者更簡單地只匹配位數字的字符串的結尾'([0-9]+)$'

1

將正則表達式保存爲需要更多內容的東西舉重。

>>> def parse_last_digits(line): return line.split('-')[-1] 
>>> s = parse_last_digits(r"99-my-name-is-John-Smith-6376827-%^-1-2-767980716") 
>>> s 
'767980716'