0

我想从字符串中获取一个数字,如font: bold 13 Arial--> 13。最优雅和 Pythonic 的方法是什么?

但是,我还需要数字的“上下文”。我想改变它,然后重建原来的(例如font: bold 13 Arial--> font: bold 14 Arial

4

1 回答 1

3

这将为您提供字符串形式的数字

>>> 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

于 2013-08-01T02:20:38.583 回答