Удалите центральную подстроку из строки с регулярным выражением в Python - PullRequest
0 голосов
/ 18 декабря 2018

Я определяю функцию в Python3 для работы со строкой с помощью регулярных выражений.

У меня проблемы с поиском регулярного выражения для извлечения части строки.Рассмотрим следующие входные строки

str1 = "http://99.199.9.90:22/some/path/here/id_type_51549851/read"
str2 = "http://99.199.9.90:22/some/path/here/myid_31654/read"

Для приведенных выше строк я хотел бы получить в качестве вывода следующие строки:

output_str1: "http://99.199.9.90:22/some/path/here/id_type_/read"
output_str2: "http://99.199.9.90:22/some/path/here/myid_/read"

Последнее подчеркивание в выходной строке не является обязательным.

Чтобы быть более общим, было бы лучше, чтобы он работал также со следующей строкой (если это возможно):

str3 =  "http://99.199.9.90:22/some/path/here/myid_alphaBeta/read"

с выводом

"http://99.199.9.90:22/some/path/here/myid_/read"

Обратите внимание, что IP,порт, пути придуманы, но структура такова.

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

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

Я начинаю с регулярного выражения, выводящего всю строку:

"(.+?)/some/path/here/(.+?)/read"

Я пробовал что-то вроде (.+?)/some/path/here/(.+?)_[.+?]/read

но это не сработало.

Функция теперь такова (часть должна быть:

def cutURL(str):
    res = str
    if (bool(re.search("(.+?)&someMatch=[0-9]+", str))):
        res = re.search("(.+?)&someMatch=[0-9]+", str).group()
    elif (bool(re.search("(.+?)/devices/(.+?)/read", str))):
        res = re.search("(.+?)/some/path/here/(.+?)/read", str)
    return res

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Используйте это

str2 = "http://99.199.9.90:22/some/path/here/myid_31654/read"
str2 = re.sub("myid_[0-9]+","myid_",str2)

Для документации метода sub и других приложений см. документы

0 голосов
/ 18 декабря 2018

Из приведенных выше примеров вы можете заменить

_\w+/read$

на

_/read

См. демонстрацию на regex101.com .

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