Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何检测python字符串中的最后数字_Regex_String_Python 2.7 - Fatal编程技术网

Regex 如何检测python字符串中的最后数字

Regex 如何检测python字符串中的最后数字,regex,string,python-2.7,Regex,String,Python 2.7,我需要检测字符串中的最后一个数字,因为它们是字符串的索引。它们可能是2^64,因此不方便只检查字符串中的最后一个元素,然后尝试第二个。。。等 字符串可能类似于 ASDGAF1HSG534 ,也就是在字符串中也可能是其他数字,但中间有某个地方,它们与我想要的索引不相邻。 < P>一个简单的正则表达式可以检测字符串结尾的数字: '\d+$' $匹配字符串的结尾\d+匹配一个或多个数字。默认情况下,+操作符是贪婪的,这意味着它匹配尽可能多的数字。因此,这将匹配字符串末尾的所有数字。这里有一个使用re

我需要检测字符串中的最后一个数字,因为它们是字符串的索引。它们可能是2^64,因此不方便只检查字符串中的最后一个元素,然后尝试第二个。。。等
字符串可能类似于<代码> 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]*$