Python - 检查字符串末尾是否为数字

50

基本上我想知道我该如何做到这一点。

以下是示例字符串:

string = "hello123"

我想知道如何检查字符串是否以数字结尾,然后打印字符串所以以数字结尾的数字。

我知道对于这个特定的字符串,可以使用正则表达式来确定是否以数字结尾,然后使用string[:]选择“123”。但是如果我正在循环遍历类似以下字符串的文件:

hello123
hello12324
hello12435436346

如果数字长度不同,我将无法使用string[:]选择该数字。希望我已经清楚地解释了我的需求,谢谢!

5个回答

69
import re
m = re.search(r'\d+$', string)
# if the string ends in digits m will be a Match object, or None otherwise.
if m is not None:
    print m.group()

\d 匹配一个数字,\d+ 表示匹配一个或多个数字(贪婪模式:尽可能匹配连续的数字)。而 $ 表示匹配字符串的结尾。


43

这并未考虑字符串中间的任何内容,但基本上是在说如果最后一个数字是数字,则该字符串以数字结尾。

In [4]: s = "hello123"

In [5]: s[-1].isdigit()
Out[5]: True

用几根绳子:

In [7]: for s in ['hello12324', 'hello', 'hello1345252525', 'goodbye']:
   ...:     print s, s[-1].isdigit()
   ...:     
hello12324 True
hello False
hello1345252525 True
goodbye False

我完全支持正则表达式的解决方案,但是这里有一种(不太美观)的方式可以获取数字。再次强调,使用正则表达式更好 :)

In [43]: from itertools import takewhile

In [44]: s = '12hello123558'

In [45]: r = s[-1::-1]

In [46]: d = [c.isdigit() for c in r]

In [47]: ''.join((i[0] for i in takewhile(lambda (x, y): y, zip(r, d))))[-1::-1]
Out[47]: '123558'

2
我会使用ss[-1].isdigit(),这样它就不会针对空字符串抛出IndexError异常了。 - Dietrich Epp
我需要找到字符串末尾的实际数字并打印出来,而不是打印“number”。在这种情况下,它需要识别字符串以“123”结尾,然后打印该数字。 - user2002290
注意:即使 int(s) 失败,s.isdigit() 可能会返回 True。 - jfs
@user2002290 知道了 - 我做了一个小更新,但完全支持你选择的答案 :) - RocketDonkey
点赞 - 这个回答比被选中的更加优雅。赞! - Unknown Coder
不会抛出 IndexError 异常:""[:-1] - pjdavis

8
另一种解决方案:查看您可以从string的结尾剥离多少个0-9数字,并使用该长度作为在string中的索引来分割数字。(如果string不以数字结尾,则返回'')。
In [1]: s = '12hello123558'

In [2]: s[len(s.rstrip('0123456789')):]
Out[2]: '123558'

2
如果字符串结尾不是数字,则此函数将返回空字符串。
import re
re.split('[^\d]', str)[-1]

由于空字符串是“假”的,因此您可以重载其含义:

def getNumericTail(str):
    re.split('[^\d]', str)[-1]

def endsWithNumber(str):
    bool(getNumericTail(str))

0

另一种解决方案:

a = "abc1323"
b = ""
for c in a[::-1]:
    try:
        b += str(int(c))
    except: 
        break

print b[::-1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接