Regex 如何检测python字符串中的最后数字
我需要检测字符串中的最后一个数字,因为它们是字符串的索引。它们可能是2^64,因此不方便只检查字符串中的最后一个元素,然后尝试第二个。。。等Regex 如何检测python字符串中的最后数字,regex,string,python-2.7,Regex,String,Python 2.7,我需要检测字符串中的最后一个数字,因为它们是字符串的索引。它们可能是2^64,因此不方便只检查字符串中的最后一个元素,然后尝试第二个。。。等 字符串可能类似于 ASDGAF1HSG534 ,也就是在字符串中也可能是其他数字,但中间有某个地方,它们与我想要的索引不相邻。 < P>一个简单的正则表达式可以检测字符串结尾的数字: '\d+$' $匹配字符串的结尾\d+匹配一个或多个数字。默认情况下,+操作符是贪婪的,这意味着它匹配尽可能多的数字。因此,这将匹配字符串末尾的所有数字。这里有一个使用re
字符串可能类似于<代码> ASDGAF1HSG534 ,也就是在字符串中也可能是其他数字,但中间有某个地方,它们与我想要的索引不相邻。 < P>一个简单的正则表达式可以检测字符串结尾的数字:
'\d+$'
$
匹配字符串的结尾<代码>\d+匹配一个或多个数字。默认情况下,+
操作符是贪婪的,这意味着它匹配尽可能多的数字。因此,这将匹配字符串末尾的所有数字。这里有一个使用re.sub
的方法:
import re
input = ['asdgaf1_hsg534', 'asdfh23_hsjd12', 'dgshg_jhfsd86']
for s in input:
print re.sub('.*?([0-9]*)$',r'\1',s)
输出:
534
12
86
说明:
534
12
86
该函数接受一个正则表达式
、一个替换字符串
,以及要在其上执行替换的字符串:re.sub(regex,replace,string)
regex“.*([0-9]*)$”
匹配整个字符串并捕获字符串结尾之前的数字。括号用于捕获我们感兴趣的部分匹配,\1
表示第一个捕获组,\2
表示第二个ect
.*? # Matches anything (non-greedy)
([0-9]*) # Upto a zero or more digits digit (captured)
$ # Followed by the end-of-string identifier
因此,我们将整个字符串替换为我们感兴趣的捕获的数字。在python中,我们需要使用原始字符串:r'\1'
。如果字符串未以数字结尾,则将返回一个带有数字的空白字符串
如果要使用re.sub
并确保行尾至少有一个数字,可以使用量词+
匹配一个或多个数字\d+
,如果行尾没有数字或没有数字,则不删除整行
^.*?(\d+)$
^
行的开头
*?
尽可能少地匹配除换行符以外的任何字符(非贪婪)
(\d+)
捕获组1,匹配1+个数字
$
行尾
或者使用一个消极的后视
^.*(?<!\d)(\d+)$
输出
534
12
86
test
如果在匹配一个数字之前存在一个非数字,如中所示,您可以将一个与单个捕获组一起使用
^.*[^\d\r\n](\d+)
^
行的开头
*
尽可能匹配除换行符以外的任何字符
[^\d\r\n]
求反字符类,匹配除数字或换行符以外的任何字符
(\d+)
捕获组1,匹配1+个数字
获取字符串中的最后数字(不一定在字符串末尾)
^
行的开头
*?
尽可能少地匹配除换行符以外的任何字符(非贪婪)
(\d+)
捕获组1,匹配1+个数字
[^\r\n\d]*
求反字符类,匹配0+乘以除换行符或数字以外的任何字符
$
行尾
您是否尝试编写一些内容?您可以发布一个输入/输出示例吗?我有字符串作为输入,我必须将字符串中的最后几位作为参数传递给其他函数。所以我需要解析这些字符串并得到最后的数字。字符串类似于问题中的“asdgaf1_hsg534”、“asdfh23_hsjd12”、“dgshg_jhfsd86”等。对于提到的字符串,我需要从提到的字符串中获得534、12和86。我刚刚写了一个答案并将其删除。你真的应该自己试试。这对初学者来说是一个很好的练习:)5 3和4是字符串中的最后一个数字谢谢你的帮助。我做到了:is_match=re.match(r'(.*)(\D)(\D+),myString)if is_match:print is_match.group(3)它可以工作
^.*[^\d\r\n](\d+)
^.*?(\d+)[^\r\n\d]*$