我有一个片段,可以找到像1.321234123这样的浮点数.我想摆脱一些精度,并从中做出1.3212.但是我怎样才能访问找到的匹配项,将其转换并替换它?
Python来源:
import fileinput
import re
myfile = open("inputRegex.txt", "r")
for line in myfile:
line = re.sub(r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?", "foundValue", line.rstrip())
print(line)
Run Code Online (Sandbox Code Playgroud)
输入文件:
4.2abc -4.5 abc - 1.321234123 abc + .1e10 abc . abc 1.01e-2 abc
1.01e-.2 abc 123 abc .123
Run Code Online (Sandbox Code Playgroud)
使用fileinput.FileInput,用inplace=True.打印行将用作每行的替换字符串.
myfile = fileinput.FileInput("inputRegex.txt", inplace=True)
for line in myfile:
line = re.sub(r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?",
"foundValue",
line.rstrip())
print(line)
Run Code Online (Sandbox Code Playgroud)
UPDATE
re.sub可以接受作为替代的功能.它将使用match对象调用,函数的返回值用作替换字符串.
以下是稍微修改的版本以使用捕获的组(用于替换功能).
line = re.sub(r"([+-]? *)(\d+(?:\.\d*)?|\.\d+)([eE][+-]?\d+)?",
lambda m: m.group(1) + re.sub('(\..{4}).*', r'\1', m.group(2)) + (m.group(3) or ''),
line.rstrip())
Run Code Online (Sandbox Code Playgroud)