基本上我想知道我会怎么做。
这是一个示例字符串:
string = "hello123"
我想知道如何检查字符串是否以数字结尾,然后打印字符串结尾的数字。
我知道这个特定字符串你可以使用正则表达式来确定它是否以数字结尾然后使用字符串[:]来选择“123”。但是,如果我循环使用这样的字符串文件:
hello123
hello12324
hello12435436346
...然后由于数字长度的不同,我将无法使用字符串[:]选择数字。我希望我能够清楚地解释我需要什么来帮助你们。谢谢!
答案 0 :(得分:49)
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+
表示匹配一位或多位数(贪婪:尽可能多地匹配)。 $
表示匹配字符串的结尾。
答案 1 :(得分:17)
这不包括字符串中间的任何内容,但它基本上表示如果最后一个数字是一个数字,则以数字结尾。
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 :(得分:3)
另一个解决方案:查看 string 结束时可以删除多少0-9位数字,并将该长度用作 string 的索引以分割数字。
(如果字符串没有以数字结尾),则返回''
。
In [1]: s = '12hello123558'
In [2]: s[len(s.rstrip('0123456789')):]
Out[2]: '123558'
答案 3 :(得分:1)
如果字符串以不是数字的结尾结束,那么这将只返回一个空字符串。
import re
re.split('[^\d]', str)[-1]
由于空字符串是 falsy ,您可以重载含义:
def getNumericTail(str):
re.split('[^\d]', str)[-1]
def endsWithNumber(str):
bool(getNumericTail(str))
答案 4 :(得分:0)
另一种解决方案:
a = "abc1323"
b = ""
for c in a[::-1]:
try:
b += str(int(c))
except:
break
print b[::-1]