Удалить часть строки, используя Regex в Python - PullRequest
0 голосов
/ 27 января 2019

У меня есть текстовый файл, который содержит информацию в следующем формате.

2018/03/21-17:08:48.638553  508     7FF4A8F3D704     snononsonfvnosnovoosr
2018/03/21-17:08:48.985053 346K     7FE9D2D51706     ahelooa afoaona woom
2018/03/21-17:08:50.486601 1.5M     7FE9D3D41706     qojfcmqcacaeia
2018/03/21-17:08:50.980519  16K     7FE9BD1AF707     user: number is 93823004
2018/03/21-17:08:50.981908 1389     7FE9BDC2B707     user 7fb31ecfa700
2018/03/21-17:08:51.066967    0     7FE9BDC91700     Exit Status = 0x0
2018/03/21-17:08:51.066968    1     7FE9BDC91700     std:ZMD:

Ожидаемый результат

Я хочу удалить часть строки до 3-го пробела (это 7FF4A8F3D704).Результат должен выглядеть следующим образом:

snononsonfvnosnovoosr
ahelooa afoaona woom
qojfcmqcacaeia
user: number is 93823004
user 7fb31ecfa700
Exit Status = 0x0
std:ZMD:

Решение

Я могу удалить «2018/03 / 21-17: 08: 48.638553» с помощью приведенного ниже кода.Но я пытаюсь заменить всю часть на ''.

import re
Regex_list = [r'\d{4}/\d{2}/\d{2}-\d{2}:\d{2}:\d{2}.\d{6}']
for p in Regex_list:
    text = re.sub(p, ' ', file)

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Если это точная структура вашего текстового файла, почему бы вам просто не обрезать первые n неинтересных символов?

for line in txt.splitlines():
    print(line[53:])


#snononsonfvnosnovoosr
#ahelooa afoaona woom                                      
#qojfcmqcacaeia                                             
#user: number is 93823004                                    
#user 7fb31ecfa700                                      
#Exit Status = 0x0                                           
#std:ZMD:                
0 голосов
/ 27 января 2019

Другой подход, который использует re.split() (и ограничивает разделение до 3 разделений). Это предполагает, что в первых трех полях нет пробелов.

Разбивается на 1 или более пробелов.

for data in L.splitlines():
    print(re.split(r'\s+', data, 3)[-1])

Выход:

snononsonfvnosnovoosr
ahelooa afoaona woom
qojfcmqcacaeia
user: number is 93823004
user 7fb31ecfa700
Exit Status = 0x0
std:ZMD:
0 голосов
/ 27 января 2019

Поскольку кажется, что в первых трех значениях столбца не будет пробелов, сопоставьте \S+\s+, чтобы получить значение столбца и связанный с ним пробел справа, и повторите его 3 раза:

output = re.sub(r'(?m)^(?:\S+\s+){3}', '', input)

https://regex101.com/r/YHXTJs/1

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