匹配字符串,直到找到一个字符为止,该字符也包含在可选字段中

时间:2018-08-23 09:44:20

标签: python regex

我有以下字符串:

string = "x OPTIONAL() y z(..., ...)"

OPTIONAL()实际上是可选的,因此字符串也可以是:

string = "x y z(..., ...)"

使用正则表达式,我要匹配字符串,直到找到以下第一个字符为止:

([{;=,

请注意,OPTIONAL()包含上述字符之一,但搜索不应在OPTIONAL(。)处停止。

所以我想拥有:

x OPTIONAL() y z

或者:

x y z

我当前正在使用:

re.search("[ \t\n\r\f\v]*(OPTIONAL\(\))?([^([{;=,]+)", string)

比赛正确地停在:

x y z

当OPTIONAL()不在字符串中时。

但是,在字符串中使用OPTIONAL()时,匹配将在以下位置停止:

x OPTIONAL

2 个答案:

答案 0 :(得分:1)

只有在(之前,您可以使用lookbehind来匹配OPTIONAL

^(?:[^([{,;=]+|(?<=OPTIONAL)\()+

See demo at regex101

答案 1 :(得分:1)

您可以使用

^(?:OPTIONAL\(\)|[^([{;=,])+

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?:-non-capturing group的开头将与
    • OPTIONAL\(\)-OPTIONAL() suibstring
    • |-或
    • [^([{;=,]-与其他([{;=其他字符匹配的negated character class,
  • )+-一次或多次。