我有下面的字符串.我想标记这使得有两个匹配的花括号和非匹配组
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>
没有被令牌化。
任何帮助将不胜感激
1条答案
按热度按时间gg58donl1#
您可以使用以下命令将字符串标记为包含
{...}
的字符串以及不包含{
和}
的字符串{[^{}]*}
- a{
,然后是零个或多个除{
和}
之外的字符,然后是一个}
字符|
-或[^{}]+
-除了{
和}
之外的一个或多个字符。参见regex demo。