gpt4 book ai didi

python - 替换子字符串,进行额外处理

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:45 25 4
gpt4 key购买 nike

我正在寻找一种 pythonic 方式来替换字符串中的子字符串,类似于 re.sub,但对找到的文本进行额外处理。它可能可以使用纯正则表达式语法来实现,但它很快变得不可读,这比简单更糟糕——真的很难扩展/调试。

这是我需要实现的目标:

输入字符串:text1 (2, 100) text2 (34,23) text3

输出:相同的字符串,但 (2, 100) 使用值 12 和 14 包装成 HTML 代码; (34, 23) 也一样。像这样的东西:

text1 <span data-coord='{"x": 0.02, "y": 1}'>(2, 100)</span>
text2 <span data-coord='{"x": 0.34, "y": 0.23}'>(34, 23)</span>
text3

使用 re.finditer 迭代匹配似乎是一个合乎逻辑的解决方案,但我如何获得其余文本?

编辑:数字可以是一位到三位数字,介于 0 到 100 之间。

脚注:我真的更喜欢有一个解决方案,其中找到的 x 和 y 组是我的自定义函数的输入,以便完全自由地处理找到的组。例如。进行错误处理:如果数字超出 0...100 的范围,我可能想用红色突出显示它。我确信我也可以根据正则表达式来定义该行为,但我发现它是错误的:正则表达式用于文本处理,而不是数字操作。而且它模糊了代码的逻辑。

最佳答案

你可以使用

import re

rx = re.compile(r'\((?P<x>\d+),\s*(?P<y>\d+)\)')

# before
string = "text1 (12, 14) text2 (34,23) text3"

def convert(match):
return '''<span data-coord='{{"x": 0.{}, "y": 0.{}"}}'>{}</span>'''.format(
match.group('x'),
match.group('y'),
match.group(0)
)

string = rx.sub(convert, string)

print(string)
# text1 <span data-coord='{"x": 0.12, "y": 0.14"}'>(12, 14)</span>
# text2 <span data-coord='{"x": 0.34, "y": 0.23"}'>(34,23)</span>
# text3

有效地使用 convert 函数结合 .format()

关于python - 替换子字符串,进行额外处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43723604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com