Шаблон Regex с использованием | вариант - PullRequest
1 голос
/ 28 мая 2020

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

test1 = re.sub(r'(Total_pass[^a-zA-Z]*).*', r'\1', test, flags=re.S).rstrip()

Это работает для /nTotal_pass 3 1 - - - 4 Star Services Limited. Тогда

test2 = re.sub(r'(Total_pass[^[\*]*).*', r'\1', test, flags=re.S).rstrip()

работает для /nTotal_pass 3 1 - - - 4 *Mount Services Limited.

Требуется вывод: /nTotal_pass 3 1 - - - 4

Объединение двух кодов:

test3 = re.sub(r'(Total_pass([^a-zA-Z]|[^\\*])*).*', r'\1', test, flags=re.S).rstrip()

или

test3 = re.sub(r'(Total_pass[^\*]*).*|(Total_pass[^a-zA-Z]*).*', r'\1', test, flags=re.S).rstrip()

Что я делаю не так?

Первый код перестает работать, так как встречает символ **, а второй работает для (**)

1 Ответ

3 голосов
/ 28 мая 2020

Вы можете объединить два инвертированных класса символов в один:

test3 = re.sub(r'(Total_pass[^*a-zA-Z]*).*', r'\1', test, flags=re.S).rstrip()
#                            ^^^^^^^^^       

См. Демонстрацию регулярного выражения

Подробности

  • (Total_pass[^*a-zA-Z]*) - Группа захвата 1:
    • Total_pass - буквальный текст
    • [^*a-zA-Z]* - 0 или более символов, кроме звездочки и букв ASCII
  • .* - любые 0 или более символов до конца строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...