gpt4 book ai didi

python - 正则表达式替换为自身

转载 作者:行者123 更新时间:2023-12-04 02:31:18 27 4
gpt4 key购买 nike

我正在使用正则表达式来标记消息中的信息。这些消息的结构是我正在寻找的某些信息是有序的。但是,某些消息的顺序以及我要查找的特定信息类型可能会根据消息类型而改变。以下是此类消息的最小示例

message = 'foo 1234567890 bar'

假设我知道我的消息由我要查找的 3 条信息组成,var_avar_bvar_c。我知道 var_avar_c 是小写字符串,而 var_b 是一个数字,它们按 var_a 的顺序出现、var_b,然后是我消息中的 var_c。我可以使用标记它们

r = re.compile('(?P<var_a>[a-z]*)\s+(?P<var_b>[0-9]*)\s+(?P<var_c>[a-z]*)')
d = [m.groupdict() for m in r.finditer(message)][0]

for key, value in d.items():
message = message.replace(value, f'[{key}]{value}[{key}]')

输出

'[var_a]foo[var_a] [var_b]1234567890[var_b] [var_c]bar[var_c]'

然而,当我的消息中有重复的单词时,例如 var_avar_c,即

message = 'foo 1234567890 foo'

我得到输出

'[var_a][var_c]foo[var_c][var_a] [var_b]1234567890[var_b] [var_a][var_c]foo[var_c][var_a]'

我将如何处理这个问题?我考虑过在正则表达式匹配期间立即替换短语(使用类似 re.sub 的东西),但我似乎无法弄清楚如何执行此操作,因为我需要能够引用我在我的文件中使用的两个名称正则表达式(如 var_a 等)以及分配给这些名称的内容。

我想要得到的输出是

'[var_a]foo[var_a] [var_b]1234567890[var_b] [var_c]foo[var_c]'

这包括空格(或与此相关的原始消息中的任何其他类型的文本)。

最佳答案

我会在这里使用 re.sub 作为:

message = 'foo 1234567890 bar'
output = re.sub(r'\b([a-z]+) (\d+) ([a-z]+)\b', '[var_a]\\1[var_a] [var_b]\\2[var_b] [var_c]\\3[var_c]', message)
print(output)

这打印:

[var_a]foo[var_a] [var_b]1234567890[var_b] [var_c]bar[var_c]

关于python - 正则表达式替换为自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64075087/

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