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

У меня небольшая проблема с регулярным выражением.

У меня есть несколько строк в одном файле, похожем на это:

TEST.SYSCOP01.D%%ODATE
TEST.SYSCOP02.D%%ODATE
TEST.SYSCOP03.D%%ODATE
...

Мне нужно определить правильное регулярное выражение и изменить имя строки для:

TEST.D%%ODATE.SYSCOP.#01
TEST.D%%ODATE.SYSCOP.#02 
TEST.D%%ODATE.SYSCOP.#03

На самом деле, я получил свое регулярное выражение:

r".SYSCOP[0-9]{2}.D%%ODATE" - чтобы найти это в файле

Но как должно выглядеть изменяющееся регулярное выражение? Мне нужно иметь номера из строки в и имени новой строки.

.D%%ODATE.SYSCOP.# - это просто строка, без регулярных выражений, и она не сработала

Есть идеи?

Ответы [ 2 ]

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

Вы можете использовать группы захвата с обратными ссылками в запасной части:

s = re.sub(r'(\.SYSCOP)([0-9]{2})(\.D%%ODATE)', r'\3\1.#\2', s)

См. Демоверсию regex

Каждый \X в шаблоне замены относится к N-м скобкам в шаблоне, поэтому вы можете изменить значение соответствия в соответствии с вашими потребностями.

Обратите внимание, что . должен быть экранирован, чтобы соответствовать буквальной точке.

Обратите внимание на необработанный строковый литерал, префикс r перед строковыми литералами помогает избежать чрезмерной обратной косой черты. '\3\1.#\2' - это не то же самое, что r'\3\1.#\2', вы можете print строковые литералы и посмотреть сами. Короче говоря, внутри необработанных строковых литералов escape-последовательности строк, такие как \a, \f, \n или \r, не распознаются, а обратная косая черта рассматривается как буквенная обратная косая черта, только та, которая используется для построения regex escape-последовательности (обратите внимание, что r'\n' и '\n' обе соответствуют новой строке, поскольку первая - escape-последовательность регулярного выражения, совпадающая с новой строкой, а вторая - буквальный символ LF.)

0 голосов
/ 08 января 2019
  • Найти: (SYSCOP)(\d+)\.(D%%ODATE)
  • Заменить: $3.$1.#$2 или \3.\1.#\2 для Python

Демо

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