Как я могу удалить определенный символ из многострочной строки с помощью регулярных выражений в Python - PullRequest
1 голос
/ 22 сентября 2019

У меня есть многострочная строка, которая выглядит следующим образом:

st = '''emp:firstinfo\n
       :secondinfo\n
       thirdinfo
     '''
print(st)

Я пытаюсь пропустить второй ':' из моей строки и получить вывод, который выглядит следующим образом:

'''emp:firstinfo\n
   secondinfo\n
   thirdinfo
   '''

Проще говоря, если он начинается с ':' Я пытаюсь игнорировать это.

Вот что я сделал:

mat_obj = re.match(r'(.*)\n*([^:](.*))\n*(.*)' , st)
print(mat_obj.group())

Очевидно, я не вижу своей ошибки, но может ли кто-нибудь помочь мне сказать, где я ошибаюсь?

Ответы [ 3 ]

3 голосов
/ 22 сентября 2019

Вы можете использовать re.sub с этим регулярным выражением:

>>> print (re.sub(r'([^:\n]*:[^:\n]*\n)\s*:(.+)', r'\1\2', st))
emp:firstinfo
secondinfo

       thirdinfo

Демонстрация RegEx

Подробности RegEx:

  • (: начать 1-ю группу захвата
    • [^:\n]*: сопоставить 0 или более символов, отличных от : и новой строки
    • :: сопоставить двоеточие
    • [^:\n]*: сопоставить 0 или более символов, отличных от : и новой строки
    • \n: сопоставить новую строку
  • ): конец 1-й группы захвата
  • \s*: совпадение 0 или более пробелов
  • :: сопоставление двоеточия
  • (.+): совпадение 1 илибольше любых символов (кроме новых строк) во 2-й группе захвата
  • \1\2: используется в замене для возврата подстроки, захваченной в группах 1 и 2.
0 голосов
/ 22 сентября 2019
#import regex library

import re

#remove character in a String and replace with empty string. 

text = "Фильм" Криминальное чтиво "вышел в 1994 году" result = re.sub (r "[az]", "", text) print (результат)

0 голосов
/ 22 сентября 2019

Вместо этого вы можете использовать sub, только не захватывайте нежелательную часть.

(.*\n)[^:]*:(.*\n)(.*)

enter image description here

Заменить на

\1\2\3

Regex Demo


import re

regex = r"(.*\n)[^:]*:(.*\n)(.*)"

test_str = ("emp:firstinfo\\n\n"
    "       :secondinfo\\n\n"
    "       thirdinfo")

subst = "\\1\\2\\3"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...