Python 使用正则表达式从字符串中提取数字

Python 使用正则表达式从字符串中提取数字,python,regex,Python,Regex,我有以下字符串: fname="VDSKBLAG00120C02 (10).gif" 如何从字符串fname(使用re)中提取值10?regex=re.compile(r)(?更简单的regex是\(\d+): 就我个人而言,我会使用这个正则表达式: ^.*\(\d+\)(?:\.[^().]+)?$ 这个,我可以在括号中选择最后一个数字,就在扩展之前(如果有的话)。如果文件名中间有任何一个,括号内不会有任何随机数。例如,它应该正确地从某个文件标题中选出 2代码/代码>(2012)Rippe

我有以下字符串:

fname="VDSKBLAG00120C02 (10).gif"
如何从字符串
fname
(使用
re
)中提取值
10

regex=re.compile(r)(?更简单的regex是
\(\d+)


就我个人而言,我会使用这个正则表达式:

^.*\(\d+\)(?:\.[^().]+)?$

这个,我可以在括号中选择最后一个数字,就在扩展之前(如果有的话)。如果文件名中间有任何一个,括号内不会有任何随机数。例如,它应该正确地从<代码>某个文件标题中选出<代码> 2代码/代码>(2012)RippedByGroup(2)。.avi

。唯一的缺点是,当数字正好位于分机之前时,它无法区分:
SomeFilmTitle(2012).avi


我假设文件的扩展名(如果有的话)不应该包含
()

似乎有点过于复杂了。为什么不只是
\(\d+)
?@DanielRoseman:请给出一个正确的答案。我也更喜欢这个解决方案。使用Daniels方法:
int(重新编译(r“\(\d+)”)。搜索(“VDSKBLAG00120C02(10.gif”)。组(1))
@DanielRoseman:我想这是一个偏好的问题。这个正则表达式直接对应OP的要求:“如果一个数字被括号括起来,就匹配它”。你的正则表达式说“匹配一对围绕着一个数字的括号。”,然后需要从中提取数字。两者最终的作用相同。优点是可以使用相同的表达式进行搜索和替换。
(?<=\() # Assert that the previous character is a (
\d+     # Match one or more digits
(?=\))  # Assert that the next character is a )
regex = re.compile(r'\((\d+)\)')
value = int(re.search(regex, fname).group(1))
^.*\(\d+\)(?:\.[^().]+)?$