Есть ли простой способ инвертировать подстроки с помощью регулярных выражений? - PullRequest
0 голосов
/ 22 февраля 2019

Я манипулирую некоторыми строками, которые содержат число и символы.Входные строки такие elementX5, elementX50 и т. Д.Я знаю, как изменить их elements_10, elements_100 и т. Д. С помощью следующего кода:

import re

inp = ["elementX5asdl", "elementX50al;smd;l", "elementX500laknsd", "elementX5000aknsd"]
for el in inp:
    tmp_usr_str = re.search("elementX50*", el).group()
    tmp_usr_str = re.sub(r"elementX", "elements_", tmp_usr_str)
    tmp_usr_str = re.sub(r"\d+", lambda x: str(2*int(x.group())), tmp_usr_str)
    print(tmp_usr_str)

Я хотел бы пойти дальше, инвертировав подстроку, содержащую число, с подстрокой, содержащей буквы вполучить что-то вроде: 10_elements, 100_elements и т. д.

Я знаю, что могу разбить строку и затем составить ее снова, но есть ли более элегантный способ с использованием регулярных выражений, возможно, встраивание команды в одиниз уже существующих линий?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Это самое простое из регулярных выражений для записи.

(.*)_(.*)

Это захватывает все до _ в \1 и все после _ в \2.

Все, что вам нужно сделать, это заменить две группы при замене:

\2_\1

Демо

0 голосов
/ 22 февраля 2019

Используйте группы захвата:

import re

inp = ["elementX5asdl", "elementX50al;smd;l", "elementX500laknsd", "elementX5000aknsd"]
for el in inp:
    tmp_usr = re.search("elementX50*", el)
    if tmp_usr:
        tmp_usr_str = tmp_usr.group()
        tmp_usr_str = re.sub(r"(element)X(\d+)", lambda x: "{}_{}s".format(str(2*int(x.group(2))), x.group(1)), tmp_usr_str)
        print(tmp_usr_str)

См. Демонстрационную версию Python .Вывод:

10_elements
100_elements
1000_elements
10000_elements

Подробности

  • tmp_usr = re.search("elementX50*", el) - извлекает необходимую подстроку
  • re.sub(r"(element)X(\d+)", lambda x: "{}_{}s".format(str(2*int(x.group(2))), x.group(1)), tmp_usr_str) - сопоставляет и захватывает element в Группу 1 и \d+ записывает в Группу 2 одну или несколько цифр после X и внутри лямбда-выражения заменяет значения группы, соединяя их с _ и добавляя s в конце.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...