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+\)(?:\.[^().]+)?$