Регулярное выражение для соответствия ниже требования - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь создать регулярное выражение для сопоставления:

Я пробовал ниже регулярное выражение, но работает только первое условие, возвращаем DS_.Все остальное после DS_ будет в порядке, но DS_TRUE не должно совпадать.

Regex = (re.findall('(return DS_)|(return Status)&(^!return DS_TRUE)', Line))

****Should Match**** 
Line = 'return DS_YES' 
Line = 'return DS_FALSE'
Line = 'return DS_EVER'
Line = 'return Status'
****Should not match****
Line = 'return DS_TRUE'

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Ваш шаблон (return DS_)|(return Status)&(^!return DS_TRUE) содержит 3 группы захвата.

Первая группа соответствует return DS_, вторая группа соответствует return Status с последующим сопоставлением с амперсандом.

Третья группа использует якорь ^ для подтверждения начала строки с последующим соответствием !return DS_TRUE.

Вы можете использовать отрицательный прогноз после возврата, чтобы утверждать, что справа не DS_TRUE.

\breturn (?!DS_TRUE).*

Regex demo

Если вы хотите найти соответствие с начала строки, вы можете также использовать якорь ^ вместо границы слова \b.

Если вы хотите совпадать только в том случае, если оно начинается с DS_, а затем со всеми последующими или только статусами, вы можете использовать:

\breturn (?!DS_TRUE)(?:DS_.*|Status)
  • \breturn[ ] Граница слова, возврат совпадения, за которым следует пробел (отмечен [ ] только для ясности)
  • (?!DS_TRUE) Отрицательный взгляд, утверждаю, что прямо справа не DS_TRUE
  • (?: Группа без захвата
    • DS_.* Соответствует DS_, за которым следуют 0+ символов, кроме новой строки
    • | или
    • Status Статус матча
  • ) Закрыть группу без захвата

Regex demo | Python demo

1 голос
/ 11 июля 2019

Использование re.findall

Ex:

import re

Line = """ 'return DS_YES' 
Line = 'return DS_FALSE'
Line = 'return DS_EVER'
Line = 'return Status'
Line = 'return DS_TRUE'
"""

r = re.findall('(return DS_(?!TRUE).*|return Status)', Line)
print(r)

Выход:

["return DS_YES' ", "return DS_FALSE'", "return DS_EVER'", 'return Status']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...