Заменить десятичные дроби внутри специального символа в файле - PullRequest
1 голос
/ 27 июня 2019

В настоящее время я пытаюсь прочитать в файле и заменить все десятичные дроби, которые находятся только между терновым знаком в нем, таким образом: т.е.

þ219.91þ
þ122.1919þ
þ467.426þ
þ104.351þ
þ104.0443þ

станет

þ219þ
þ122þ
þ467þ
þ104þ
þ104þ

Суть чего-то, что я пытаюсь воспроизвести, который работает в Notepad ++ (замена регулярных выражений - ниже) и пытается воспроизвести это в python (код ниже)который не работает).Есть предложения?

В Notepad ++:

Find: (\xFE\d+)\.\d+(\xFE)
Replace: $1$2

Python:

for line in file:
        line = re.sub("(\xFE\d+)\.\d+(\xFE)", "\xFE\d+\xFE", line)

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Вы не заменяете десятичные числа: вы усекаете значения. Подойдет ли вам математическая обработка? Это предполагает, что все строки имеют формат, который вы показываете.

for line in file:
    _, val, _ = line.split('þ')   # null string, value, null string
    line = 'þ' + str(int(val))+ 'þ'

Обратите внимание, что вы могли бы немного уменьшить это с помощью одной строки в цикле:

    line = 'þ' + str(int(line.split('þ')[1]))+ 'þ'
1 голос
/ 27 июня 2019

Вы можете использовать однострочник, например:

f = ["þ219.91þ", "þ122.1919þ", "þ467.426þ", "þ104.351þ", "þ104.0443þ"]

print(["þ{}þ".format(int(float(l.strip("þ")))) for l in f])

Результат :

['þ219þ', 'þ122þ', 'þ467þ', 'þ104þ', 'þ104þ']
1 голос
/ 27 июня 2019

Я не думаю, что было бы необходимо иметь \ xFE, и это может просто сработать:

import re

regex = r"(þ\d+)\.\d+(þ)"

test_str = ("þ219.91þ\n"
    "þ122.1919þ\n"
    "þ467.426þ\n"
    "þ104.351þ\n"
    "þ104.0443þ")

subst = "\\1\\2"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...