正则表达式:替换文本中的多个值
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)-
开头的十进制值。每次正则表达式匹配时,该值将替换为迭代器的输出。
我有一个文本文件,其中每一行都包含特定的值。他们经常改变。我想一次替换一行中的两个值而不重写整行。
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)-
开头的十进制值。每次正则表达式匹配时,该值将替换为迭代器的输出。