首页 > 解决方案 > 给定整数参数Python时的字符串操作

问题描述

我正在处理一个 SVG 文件。我有这个字符串作为一种风格

'.cls-1{fill:#755841;}.cls-2{fill:#f7c394;}.cls-3{fill:#9b7657;}.cls- 
4{fill:#7f6145;}.cls-5{fill:#ffc9a1;}.cls-6{fill:#ffcd98;}.cls- 
7{fill:#3d0c0c;}.cls-8{fill:#fff;}.cls-9{fill:#313cc4;}'

我想创建一个函数,它接收输入说 14 并将此字符串更改为从输入继续的数字开始。例如这里的类将从 14 + 1 = 15 开始,依此类推:

'.cls-15{fill:#755841;}.cls-16{fill:#f7c394;}.cls-17{fill:#9b7657;}.cls- 
18{fill:#7f6145;}.cls-19{fill:#ffc9a1;}.cls-20{fill:#ffcd98;}.cls- 
21{fill:#3d0c0c;}.cls-22{fill:#fff;}.cls-23{fill:#313cc4;}'

不确定什么是最好的方法。是正则表达式吗?

标签: pythonstringsvg

解决方案


您可以使用以下方式:

包括对外部范围的访问:

import re

start_point = 5

input_value = """.cls-1{fill:#755841;}.cls-2{fill:#f7c394;}.cls-3{fill:#9b7657;}.cls-4{fill:#7f6145;}.cls-5{fill:#ffc9a1;}.cls-6{fill:#ffcd98;}.cls-7{fill:#3d0c0c;}.cls-8{fill:#fff;}.cls-9{fill:#313cc4;}"""


def callback(match):
    global start_point
    start_point += 1

    return '{key}{value}'.format(
        key=match.group(1),
        value=start_point
    )


result = re.sub('(cls-)([0-9]+)', callback, input_value)

print(result)

无法访问外部范围:

import re

from functools import partial

start_point = 5

input_value = """.cls-1{fill:#755841;}.cls-2{fill:#f7c394;}.cls-3{fill:#9b7657;}.cls-4{fill:#7f6145;}.cls-5{fill:#ffc9a1;}.cls-6{fill:#ffcd98;}.cls-7{fill:#3d0c0c;}.cls-8{fill:#fff;}.cls-9{fill:#313cc4;}"""


def callback(point, match):
    point[0] += 1

    return '{key}{value}'.format(
        key=match.group(1),
        value=point[0]
    )


func = partial(callback, [start_point])
result = re.sub('(cls-)([0-9]+)', func, input_value)

print(result)

结果:

  • 输入: .cls-1{fill:#755841;}.cls-2{fill:#f7c394;}.cls-3{fill:#9b7657;}.cls-4{fill:#7f6145;}.cls-5 {fill:#ffc9a1;}.cls-6{fill:#ffcd98;}.cls-7{fill:#3d0c0c;}.cls-8{fill:#fff;}.cls-9{fill:#313cc4; }
  • 起点: 5
  • 输出: .cls-6{fill:#755841;}.cls-7{fill:#f7c394;}.cls-8{fill:#9b7657;}.cls-9{fill:#7f6145;}.cls-10 {fill:#ffc9a1;}.cls-11{fill:#ffcd98;}.cls-12{fill:#3d0c0c;}.cls-13{fill:#fff;}.cls-14{fill:#313cc4; }

推荐阅读