表达式错在哪里,谢谢

表达式错在哪里,谢谢

>>> rt = re.compile('^(UNB)\+(UNOA:1)\+([\w\W]*)\+(ALL)\+([\w\W]*)')
>>> rt.search('UNB+UNOA:1+COSTACO+AAL+071119:1009+0711191009+++++COSTACO\'').groups()

想得到类试以下结果集,谢谢
['UNB', 'UNOA:1', 'COSTACO', 'AAL', '071119:1009', '0711191009', '', '', '', '', "COSTACO'"]

以上正则表达式不能正常执行,不用字符串的.split 方法
请帮我看看,整个系统就差这一个报文就解析完了,谢谢

你的正则式的组个数与想要的结果不匹配啊,当然不行了。而且看这个:

[Copy to clipboard] [ - ]
CODE:
>>> rt = re.compile('^(UNB)\+(UNOA:1)\+([\w\W]*)')
>>> rt.search('UNB+UNOA:1+COSTACO+AAL+071119:1009+0711191009+++++COSTACO\'').groups()
('UNB', 'UNOA:1', "COSTACO+AAL+071119:1009+0711191009+++++COSTACO'")

[\w\W*]就可以把所有的东西匹配完。我猜想你的整个程序可能比较复杂,不知道通用性如何。
我就想先把前面的批配完,后面的不考虑,请问我该怎样改?谢谢
通过对每一种报文定义正则,利用正则返回的信息读取报文的内容
问题是一个()只能匹配一组,都匹配完了根本出来不若干个'','','',''
我想把剩下的先放到一个组里,先不处理,因为余下的信息对我已经没有用处了


[Copy to clipboard] [ - ]
CODE:
>>> rt = re.compile('^(UNB)\+(UNOA:1)\+([\w]+)\+(AAL)\+(.*)')
>>> rt.search('UNB+UNOA:1+COSTACO+AAL+071119:1009+0711191009+++++COSTACO\'').groups()
('UNB', 'UNOA:1', 'COSTACO', 'AAL', "071119:1009+0711191009+++++COSTACO'")

使用.可以匹配任意的字符
要的就是这种效果 
谢谢Limodou,
在吗?
rt = re.compile('^(TDT)\+(20)\+([\w\W]*)\+([\w\W]*)\+(.*)')
rt.search('TDT+20+0745S++DEHU:103::CONTI SYDNEY:LR++AAL:172:20\'').groups()
('TDT', '20', '0745S++DEHU:103::CONTI SYDNEY:LR', '', "AAL:172:20'")
我怎么能将这两个结果集分开?
0745S++
rt = re.compile('^(TDT)\+(20)\+([\w]*)\+([\w\W]*)\+(.*)')
rt.search('TDT+20+0745S++DEHU:103::CONTI SYDNEY:LR++AAL:172:20\'').groups()

用这个方法虽然可以实现,但是怕如果出现\w之外的东西怎么办?
像下面

>>> rt = re.compile('^(TDT)\+(20)\+([\w]*)\+([\w\W]*)\+(.*)')
>>> rt.search('TDT+20+0745S++D  EHU:103::CONTI SYDNEY:LR++AAL:172:20\'').groups()
('TDT', '20', '0745S', '+D  EHU:103::CONTI SYDNEY:LR+', "AAL:172:20'")
>>>

第四个已经不正确了