как создать регулярное выражение, соответствующее `change: // problem / 59689726` и` change: // 1234567` - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь регулярное выражение совпадения строк change://problem/59689726 и change://1234567, но приведенный ниже код соответствует только первому, как я могу изменить регулярное выражение для соответствия обоим? Как сделать problem/ необязательным?

INPUT КОД:

import re
out = '''
<change://problem/59689726> This is a test1
change://1234567 This is a test2
[Problem]
This is problem desription
'''
m = re.findall("[\S]*(?:change:\/\/problem\/(\d{8,8}))", out.split('[Problem]')[0])
if m:
    for radar in set(m):
        print radar

CURRENT OUTPUT:-

59689726

EXPECTED OUTPUT:-

59689726 1234567

1 Ответ

1 голос
/ 27 марта 2020

Если вам нужно получить любые 1+ цифры после change://problem/ или change://, вы можете использовать

re.findall("change://(?:problem/)?(\d+)", out.split('[Problem]')[0])

См. Python demo и регулярное выражение demo .

Шаблон соответствует:

  • change:// - буквенная строка
  • (?:problem/)? - 1 или 0 вхождений problem/ подстрока
  • (\d+) - группа 1 (что будет возвращено re.findall): 1+ цифр
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...