У меня есть фрагмент, который находит числа с плавающей запятой, такие как 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)
Входной файл:
4.2abc -4.5 abc - 1.321234123 abc + .1e10 abc . abc 1.01e-2 abc
1.01e-.2 abc 123 abc .123
3 ответа
Используйте fileinput.FileInput
с {{X1} } . напечатанная строка будет использоваться в качестве строки замены для каждой строки.
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)
ОБНОВЛЕНИЕ
re.sub
может принять функцию в качестве замены. Он будет вызван с объектом сопоставления, а возвращаемое значение функции используется в качестве строки замены.
Ниже приведена слегка измененная версия для использования захваченных групп (для использования в функции замены).
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())
num_decimal_places = 2
re.sub(r"(\d+)(\.\d{1,num_decimal_places})\d*", r"\1\2", line.rstrip())
\1\2
фиксирует совпадения в двух наборах скобок. Это не округляется, но будет усекать
import fileinput
import re
myfile = open("inputRegex.txt", "r")
def changePrecision(matchObj):
return str(round(float(matchObj.group(0).replace(" ","")),4))
for line in myfile:
newLine = re.sub(r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?", changePrecision, line)
print newLine
Я надеюсь это то, что ты ищешь
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.