为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

元芳怎么了 2023-08-08 15:12:16
我似乎无法让正则表达式与以下示例一起使用。基本上我想从一个字符串中解析 4 个组,如下所示:test.thistest[extra].thistest[extra].this{data}test.this{data}我想分别针对上面的示例得到这样的答案:val1='test', val2=None, val3='this', val4=Noneval1='test', val2='extra', val3='this', val4=Noneval1='test', val2='extra', val3='this', val4='data'val1='test', val2=None, val3='this', val4='data'我尝试了这个,但它不起作用:import retests = ["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])
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

如果只有第二组和第四组是可选的,您可以使用:

^([^\[\.]+)(?:\[([^\]]+)])?\.([^{\r\n]+)(?:{([^}\r\n]+)})?$

演示

请注意,\r\n被添加到第三组和第四组的否定字符类中,以避免超出行尾。如果您只使用单行字符串,则没有必要。


查看完整回答
反对 回复 2023-08-08
?
慕少森

TA贡献2019条经验 获得超9个赞

import re


tests = ["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+)? -> 捕获数据


查看完整回答
反对 回复 2023-08-08
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信