我需要从一个没有空格的字符串中提取一个数字,例如:
"auxiliary[0]"
我能想到的唯一方法是:
def extract_num(s):
s1=s.split["["]
s2=s1[1].split["]"]
return int(s2[0])
哪个看起来很笨拙,有没有人知道更好的方法呢? (数字总是在“[]”brakets中)
答案 0 :(得分:4)
您可以使用正则表达式(内置re
module):
import re
bracketed_number = re.compile(r'\[(\d+)\]')
def extract_num(s):
return int(bracketed_number.search(s).group(1))
模式匹配文字[
字符,后跟1位或更多位数(\d
转义表示数字字符组,+
表示1或更多),后跟文字]
。通过在\d+
部分周围加上括号,我们创建了一个捕获组,我们可以通过调用.group(1)
来提取("获取第一个捕获组结果")。
结果:
>>> extract_num("auxiliary[0]")
0
>>> extract_num("foobar[42]")
42
答案 1 :(得分:2)
我会使用正则表达式来获取数字。请参阅文档:http://docs.python.org/2/library/re.html
类似的东西:
import re
def extract_num(s):
m = re.search('\[(\d+)\]', s)
return int(m.group(1))
答案 2 :(得分:1)
print a[-2]
print a[a.index(']') - 1]
print a[a.index('[') + 1]
答案 3 :(得分:0)
for number in re.findall(r'\[(\d+)\]',"auxiliary[0]"):
do_sth(number)