Регулярные выражения: различать строки, включающие / исключающие данное слово - PullRequest
0 голосов
/ 26 декабря 2018

Я работаю в Python и пытаюсь обработать вывод GLM StatsModel.Я относительно новичок в регулярных выражениях.У меня есть строки, такие как

string_1 = "C(State)[T.Kansas]"
string_2 = "C(State, Treatment('Alaska'))[T.Kansas]"

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

pattern = re.compile('C\((.+?)\)\[T\.(.+?)\]') 
print(pattern.search(string_1).group(1))
#State
print(pattern.search(string_2).group(1))
#State, Treatment('Alaska')

Так что обе эти строки соответствуют шаблону.Но мы хотим получить State в обоих случаях.В основном мы хотим прочитать все после запятой (включая ее) в первых скобках.

Как мы можем отличить шаблон string_2 от string_1 и извлечь только State без , Treatment?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы можете использовать это регулярное выражение, используя классы отрицательных символов:

C\((\w+)[^[]*\[T\.([^]]+)\]

Демонстрация RegEx

0 голосов
/ 26 декабря 2018

Вы можете добавить необязательную группу без захвата, вместо того, чтобы просто разрешить все символы:

pattern = re.compile('C\((.+?)(?:, .+?)?\)\[T\.(.+?)\]')

(?:...) группирует содержимое без захвата.Трейлинг ? делает группу необязательной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...