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

þ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)
1
Bay P 27 Июн 2019 в 19:36

3 ответа

Лучший ответ

Я не думаю, что было бы необходимо иметь \ 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)
1
Emma 27 Июн 2019 в 16:44

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

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
l'L'l 28 Июн 2019 в 02:23

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

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

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

    line = 'þ' + str(int(line.split('þ')[1]))+ 'þ'
1
Prune 27 Июн 2019 в 16:45