正则表达式:区分包含/不包含给定单词的字符串

时间:2018-12-26 18:30:26

标签: python regex

我正在使用Python并尝试处理StatsModel的GLM输出。我对正则表达式比较陌生。 我有诸如

的字符串
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_2string_1的{​​{1}}模式而没有State提取, Treatment

2 个答案:

答案 0 :(得分:3)

您可以添加一个可选的非捕获组,而不仅仅是允许所有字符:

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

(?:...)将内容分组在一起而不捕获它。尾随?使该组成为可选。

答案 1 :(得分:3)

您可以使用否定字符类使用此正则表达式:

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

RegEx Demo