我似乎無法讓正則表達(dá)式與以下示例一起使用。基本上我想從一個字符串中解析 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貢獻(xiàn)1871條經(jīng)驗 獲得超13個贊
如果只有第二組和第四組是可選的,您可以使用:
^([^\[\.]+)(?:\[([^\]]+)])?\.([^{\r\n]+)(?:{([^}\r\n]+)})?$
演示。
請注意,\r
和\n
被添加到第三組和第四組的否定字符類中,以避免超出行尾。如果您只使用單行字符串,則沒有必要。

慕少森
TA貢獻(xiàn)2019條經(jīng)驗 獲得超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+) -> 捕獲此內(nèi)容
(\w+)? -> 捕獲數(shù)據(jù)
添加回答
舉報
0/150
提交
取消