正则表达式:替换文本中的多个值

RegEx: replace multiple values in text

我有一个文本文件,其中每一行都包含特定的值。他们经常改变。我想一次替换一行中的两个值而不重写整行。


Current regex pattern:
(\(Psig\)- )(\d+\.\d+)

Regex to do one value at a time:
^(.*?(.*?\(Psig\)- ){1})(\d+\.\d+)

Using  backreference to change values

来自文件的行:

RPM- 1400, (Psig)- 57.66, Ts- 48.11, (Psig)- 299.33

我目前想更改 (Psig)- 之后的值,目前模式化我需要更改的两个值,但是当使用反向引用时,它会将两个值更改为相同的值。

在这个例子中:

57.66-> 22.77

299.33->355.26

我正在考虑使用 re.sub() 来替换这些值。这可能与此方法有关,还是有其他选择来执行此操作?

假设一行中只有两个匹配项,请您尝试以下操作:

#!/usr/bin/python

import re

s = 'RPM- 1400, (Psig)- 57.66, Ts- 48.11, (Psig)- 299.33'
newval = ['22.77', '355.26']            # array of new values
val_iter = iter(newval)                 # iterator to return each new value

s = re.sub(r'(?<=\(Psig\)- )[\d.]+', lambda x: next(val_iter), s)
print(s)

输出:

RPM- 1400, (Psig)- 22.77, Ts- 48.11, (Psig)- 355.26

正则表达式 (?<=\(Psig\)- )[\d.]+ 匹配一个以字符串 (Psig)- 开头的十进制值。每次正则表达式匹配时,该值将替换为迭代器的输出。