我想从字符串中获取一个数字,如font: bold 13 Arial
--> 13
。最优雅和 Pythonic 的方法是什么?
但是,我还需要数字的“上下文”。我想改变它,然后重建原来的(例如font: bold 13 Arial
--> font: bold 14 Arial
)
这将为您提供字符串形式的数字
>>> import re
>>> num_regex = re.compile(r'\d+')
>>> num_regex.findall("font: bold 13 Arial")
['13']
从那里您可以拉出第一个元素并转换为 int。
同样,您可以使用search
代替findall
>>> num_regex = re.compile(r'(\d+)')
>>> matcher = num_regex.search("font: bold 13 Arial")
>>> matcher.groups()
('13',)
>>> matcher.group(1)
'13'
由于您现在说要替换数字的内容,因此可以使用以下sub
方法:
>>> num_regex = re.compile(r'\d+')
>>> num_regex.sub('14', "font: bold 13 Arial")
'font: bold 14 Arial'
最后,如果你想做一些事情,比如将当前值增加 1,并且喜欢有非常不可读的代码,那么这应该可以解决问题:
import re
source = "font: bold 13 Arial"
print re.sub(r'\d+', str(int(re.findall(r'\d+', source)[0])+1), source)
输出:
font: bold 14 Arial
这是更有用的方法,但请注意,没有错误处理和输入清理。在这种形式下,请谨慎使用。:P
num_rex = re.compile(r'\d+')
def increment_str_number(source):
return num_rex.sub(str(int(num_rex.findall(source)[0])+1), source)
最后,要替换所有数字,假设您的源中有多个数字(尽管只有一个也可以):
import re
num_rex = re.compile(r'\d+')
def increment_str_number(source):
nums = set(num_rex.findall(source))
for num in nums:
num = int(num)
source = re.sub("%s" % (num), "%s" % (num + 1), source)
return source
输入
字体:粗体 13 Arial 15
输出
字体:粗体 14 Arial 16