Регулярные выражения. Удалить всю строку, если после символа ":" ничего нет - PullRequest
0 голосов
/ 23 января 2020

Например, мой текстовый файл - это файл журнала.

...
User1: hi
User2: 
User1: whoops, forgot to tell you
User2: ok
User1: 
User2:
User1: test

Результат, который я хочу:

...
User1: hi
User1: whoops, forgot to tell you
User2: ok
User1: test

Я пробовал ^[^:]*\S, но до этого выбирается только все ":" символ. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 января 2020

Кулоны \S также соответствуют другому символу, отличному от :

. Вместо этого вы можете сопоставить :, а затем сопоставить пробельные символы, кроме новой строки, до конца строки.

^[^:]*:[^\S\r\n]*\r?\n
  • ^ Начало строки
  • [^:]*: 0+ вхождений любого символа, кроме :, затем соответствует :
  • [^\S\r\n]* 0+ вхождений символа пробела за исключением новой строки
  • \r?\n Соответствует новой строке (или подтверждает конец строки, используя чередование)

Regex demo

Обратите внимание, что [^:] также может соответствовать символу новой строки.

0 голосов
/ 23 января 2020

Вы можете сделать это без re, следующим образом

text = '''User1: hi
User2: 
User1: whoops, forgot to tell you
User2: ok
User1: 
User2:
User1: test'''
print(*[line for line in text.split('\n') if line.rstrip().split(':', 1)[-1]], sep='\n')

Вывод:

User1: hi
User1: whoops, forgot to tell you
User2: ok
User1: test

Я предполагаю, что во всех строках есть хотя бы одна :, тогда для каждой строки I:

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