当字符串介于两个字符串之间时,正则表达式将不匹配

2024-09-29 21:46:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有以下解析场景,有行的情况:

  1. {{ name xxxxxxCONTENTxxxxx /}}
  2. {{ name }} xxxxxxxCONTENTxxxxxxx {{ name /}}
  3. {{ name xxxxxxCONTENTxxx {comand} xxxxCONTENTxxx /}}

我需要做的就是使用regex对给定行所属的情况进行分类。在

我可以成功地在1)和2)之间进行分类,但在处理3)时遇到困难。在

捕捉1)我使用:

re.match('\s*{{[^{]*?/}}\s*',line)

捕捉2)我使用:

^{pr2}$

然后升起一个标志来保持上下文,因为情况2)可以跨越多行。我怎样才能抓住第三个案例)??在

我当前尝试匹配的条件是测试:

- start with '{{'
- end with '/}}'
- with no '{{' in between

不过,我很难用正则表达式来表达这一点。在


Tags: namerematchwithline场景分类情况
1条回答
网友
1楼 · 发布于 2024-09-29 21:46:57

条件:

- start with '{{'
- end with '/}}'
- with no '{{' in between

非常适合于tempered greedy token。在

^{pr2}$

regex demo。在

(?:(?!{{|/}}).)*匹配不是{{和{}的任何文本(因此匹配到第一个/}})。锚(^$)只允许匹配以{{开头、以/}}结尾且内部没有{{的整个字符串。请注意,使用re.match,您不需要^锚定。在

现在,为了只匹配第三种类型的字符串,您需要指定您的模式应该有{....}

^{{(?:(?!{{|/}}).)*{[^{}]*}(?:(?!{{|/}}).)*/}}$
   |     1   -|| - 2 -||    1  -|

another regex demo

第1部分是上面描述的回火贪婪令牌,{[^{}]*}匹配一个{...}子串,使得它在输入中是必需的。在

相关问题 更多 >

    热门问题