使用正则表达式将字符串解析为组

我似乎无法让正则表达式与以下示例一起使用。基本上我想从一个字符串中解析 4 个组,如下所示:


test.this

test[extra].this

test[extra].this{data}

test.this{data}

我想分别针对上面的示例得到这样的答案:


val1='test', val2=None, val3='this', val4=None

val1='test', val2='extra', val3='this', val4=None

val1='test', val2='extra', val3='this', val4='data'

val1='test', val2=None, val3='this', val4='data'

我尝试了这个,但它不起作用:


import re


tests = ["test.this",

         "test[extra].this",

         "test[extra].this{data}",

         "test.this{data}",]


for test in tests:

    m = re.match(r'^([^\[\.]+)(?:\[([^\]]+)])(?:\.([^{]+){)([^}]+)?$', test)

    if m:

        print(test, '->', m[1], m[2], m[3], m[4])


元芳怎么了
浏览 119回答 2
2回答

慕桂英4014372

如果只有第二组和第四组是可选的,您可以使用:^([^\[\.]+)(?:\[([^\]]+)])?\.([^{\r\n]+)(?:{([^}\r\n]+)})?$演示。请注意,\r和\n被添加到第三组和第四组的否定字符类中,以避免超出行尾。如果您只使用单行字符串,则没有必要。

慕少森

import retests = ["test.this",     "test[extra].this",     "test[extra].this{data}",     "test.this{data}"]pat = re.compile(r'(\w+)([\[])?(\w+)?([\]])?\.(\w+){?(\w+)?')for test in tests:    x = pat.search(test)    print(x.group(1),x.group(3),x.group(5),x.group(6))(\w+) -> 捕获测试([\[])? -> 捕获[(\w+)? -> 捕获额外的([\]])? -> 捕获](\w+) -> 捕获此内容(\w+)? -> 捕获数据
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python