这是一个使用的方法re.sub
:
import re
input = ['asdgaf1_hsg534', 'asdfh23_hsjd12', 'dgshg_jhfsd86']
for s in input:
print re.sub('.*?([0-9]*)$',r'\1',s)
Output:
534
12
86
解释:
该函数需要一个regular expression
, a replacement string
,以及string
您想要进行替换:re.sub(regex,replace,string)
正则表达式'.*?([0-9]*)$'
匹配整个字符串并捕获字符串末尾之前的数字。括号用于捕获我们感兴趣的匹配部分,\1
指第一个捕获组并且\2
第二个等..
.*? # Matches anything (non-greedy)
([0-9]*) # Upto a zero or more digits digit (captured)
$ # Followed by the end-of-string identifier
因此,我们将整个字符串替换为我们感兴趣的捕获数字。在 python 中,我们需要使用原始字符串:r'\1'
。如果字符串不以数字结尾,则返回空白字符串。
twosixfour = "get_the_numb3r_2_^_64__18446744073709551615"
print re.sub('.*?([0-9]*)$',r'\1',twosixfour)
>>> 18446744073709551615