regex 正则表达式对匹配项和非匹配项进行分组

fjaof16o  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(197)

我有下面的字符串.我想标记这使得有两个匹配的花括号和非匹配组

str='{field1}somestring{field2}somestring2{feild3}<somestring3>'

我知道我可以标记花括号:

re.findall('({[^}]*})', str) 
['{field1}', '{field2}', '{feild3}']

但我真正想要的是:

['{field1}', 'somestring', '{field2}', 'somestring2', '{feild3}', '<somestring3>']

我在做这件事时遇到了麻烦。。。到目前为止我做的最接近的是下面的

re.findall('(.*?)({[^}]*})(.*?)', str) 
[('', '{field1}', ''), ('somestring', '{field2}', ''), ('somestring2', '{feild3}', '')]

但是你可以看到它创建了一个包含三个组的数组,使用空字符串,最后一个令牌<somestring3>没有被令牌化。
任何帮助将不胜感激

gg58donl

gg58donl1#

您可以使用以下命令将字符串标记为包含{...}的字符串以及不包含{}的字符串

re.findall(r'{[^{}]*}|[^{}]+', text)
  • 详情 *:
  • {[^{}]*}- a {,然后是零个或多个除{}之外的字符,然后是一个}字符
  • |-或
  • [^{}]+-除了{}之外的一个或多个字符。

参见regex demo

相关问题