Я определяю функцию в 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