Замените значение (regex) в текстовом файле ничем, используя python - PullRequest
0 голосов
/ 03 сентября 2018

ОБНОВЛЕНО:

Я пытаюсь с python, прочитать файл, найти определенный раздел, удалить его

Строка (которая появляется в документах несколько раз с разными переменными) должна быть заменена на НИЧЕГО:

, "total": VARIABLE, "stats": {VARIABLE}, "took": VARIABLE

Я понимаю принцип, как заменить один текст на другой:

.replace('XXX', 'YYY')\

Попытается найти все XXX и заменит YYY

Примените эту технологию к моей проблеме:

.replace(', "total": VARIABLE, "stats": {VARIABLE}, "took": VARIABLE', '')\

Этот метод работает (теоретически) единственная часть, которую я не понимаю, с чем нужно заменить VARIABLE , так что он подберет что-нибудь, это [a-zA-Z] [ 0-9] ?? Я немного потерян здесь

РЕДАКТИРОВАТЬ 1,0:

Исходя из дополнительных исследований, необходимо использовать "import re" - RegEx

regExData = re.sub(r', "total":(.*) , "stats": {(.*)}, "took":(.*)', '', LFPostData)

Но не уверен, как именно его использовать.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы можете найти все совпадения определенного вами шаблона RegEx, а затем заменить каждую из этих строк в вашем тексте:

import re

raw_text = r'Lorem ipsum dolor sit amet, consectetur adipisci elit, sed eiusmod tempor incidunt ut, "total": VARIABLE, "stats": {VARIABLE}, "took": VARIABLE labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea, "total": bobi, "stats": {42}, "took": vori commodi consequatur. Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. '

matches = re.findall(r', "total": \S*, "stats": {\S*}, "took": \S*', raw_text)



for match in matches:
    raw_text = raw_text.replace(match, ' ')

print(raw_text)

ВЫВОД:

Lorem Ipsum Dolor Sit Amet, Concectetur Adipisci Elit, Sed EiusMod Временное исцеление, утрата труда и долина. Ut enim ad minim Veniam, Quis Nostrum Exercisingem Ullam Corporis Suscipit labouriosam, nisi ut aliquid ex ea Goodsi Conquatur. Quis aute iure репеэндерит в волюте велит эссе силум долоре ес фугиат нулла pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in виновник смерти, моллит аним, то есть лейборист.

Обратите внимание, что у нас есть 2 вхождения вашего паттерна , "total": VARIABLE, "stats": {VARIABLE}, "took": VARIABLE с разными значениями.
RegEx , "total": \S*, "stats": {\S*}, "took": \S* довольно прост:

, "total": буквальное совпадение
\S* соответствует всему, что не является пробелом
, "stats": { буквальное совпадение
\S* соответствует всему, что не является пробелом
}, "took": буквальное совпадение
\S* соответствует всему, что не является пробелом

с re.findall вы найдете все вхождения данного шаблона. Это означает, что print(matches) выведет:

[', "total": VARIABLE, "stats": {VARIABLE}, "взял": VARIABLE', ', "Всего": Боби, "Статистика": {42}, "взял": vori ']

Какой список всех матчей.

Затем мы .replace каждый из совпадений в нашем raw_text

Это должно ответить на все ваши сомнения, но вам, вероятно, следует пересмотреть свой общий подход, так как я также думаю (как предлагается в некоторых комментариях), что вы плохо обращаетесь с JSON

0 голосов
/ 03 сентября 2018

1) Я использую python "replace", чтобы удалить {}, так как они вызывают проблему в sub (regExpression)

.replace(' "stats": {}, ', '')

2) Затем я использую (import re) -Python RegEx, чтобы удалить остальные

regExData = re.sub(r', "total": ([a-zA-Z0-9]+),"took": ([a-zA-Z0-9]+)', '', LFPostData)
...