Как игнорировать группу символов, пока не встретит указанный символ в регулярном выражении? - PullRequest
0 голосов
/ 04 января 2019

Я следую регулярному выражению, которому нужно соответствовать, используя re.match.Сначала мне нужно сопоставить «susa» и игнорировать все, что угодно, вплоть до символа «@» (не считая его), и захватывать все после него.Однако, когда я пытаюсь получить вывод, используя re.search, он не совпадает.Почему я не получаю желаемый результат?re.match действительно соответствует выходу?(Я не могу проверить, так как он дает только место в памяти).Спасибо.

import re

output = 'susa ssh://user@internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/'
url_match = re.match("\s*susa\s+[^(/.+?(?=@)/)]+([^ ]+)", output)

Result = re.search("\s*susa\s+[^(/.+?(?=@)/)]+([^ ]+)", output)

if Result:
    print Result.groups()

In [29]: runfile('/home/user/Desktop/python_practise/match_urls.py', wdir='/home/user/Desktop/python_practise')
    ('//user@internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/',)

1 Ответ

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

Вы можете использовать

r"\s*susa\s[^@]+(\S+)"

Детали

  • \s* - 0+ пробелов
  • susa - подстрока susa
  • \s - пробел
  • [^@]+ - 1+ символов, отличных от @ ([^...] - это отрицательный символьный класс , который соответствует любым символам, отличным от указанных в классе)
  • (\S+) - Группа захвата 1: один или несколько непробельных символов.

Чтобы получить значение внутри группы 1, используйте url_match.group(1).

См. Демоверсию Python :

import re

output = 'susa ssh://user@internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/'
url_match = re.match(r"\s*susa\s[^@]+(\S+)", output)
if url_match:
    print(url_match.group(1))
# => @internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/

Result = re.search(r"\s*susa\s[^@]+(\S+)", output)
if Result:
    print(Result.group(1))
# => @internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...