python正则表达式求解,急!~

python正则表达式求解,急!~

求解字符串:str = 'A11B22C33D44E55'
例:拆解字符串
str = 'A11B22C33'
解析格式:
p = re.compile(r'A(.*)B(.*)C(.*)')
生成 LIST 没有问题
但字符串中可能含有D44E55等(不定,例'A11B22C33D44E55'),也需要拆分,请教表达式该怎么写或(|)关系啊
p = re.compile(r'[\s(\d)]+')
这样就可以了吧,我是初学者,不知道理解的对不对
谢谢,我想这样,
str = '/B00/20080624/A30/BNKACNBJ002/E26/01/G53/03'
p = re.compile(r'/B00/(\d+)/A30/(\w+)/E26/(.*)/G53/(.*)')
print p.findall(str)
>>> [('20080624', 'BNKACNBJ002', '01', '03')]

这个字符串拆分通过 /B00/ ,/A30/,/E26/,/G53/ 进行分割拆分,但是其中/E26 /,/G53/可能在str中不会出现也可能出现或一个,如下
str = '/B00/20080624/A30/BNKACNBJ002
p = re.compile(r'/B00/(\d+)/A30/(\w+)/E26/(.*)/G53/(.*)')
print p.findall(str)
>>>[]

不知道怎么表达式该如何写才能够同时对付这两种情况呢
p = re.compile(r'/B00/(\d+)/A30/(\w+)/(?:E26/)?(\d+)/(?:G53/)?(\d+)')
是不是这样呢?
感谢你的回复
我试了一下,如果去掉/G53/03,返回的还是空的
根据你的回复,我改动了一下,似乎可以了,还要好好测测,自己还都有点一知半解呢
p = re.compile(r'/B00/(\d+)/A30/(\w+)(?:/E26/|)(?\d*))(?:/G53/|)(?\d*))')
我最终是需要动态的根据配置来拼出正则表达式,不知是否可行

我理解错了,我以为只去掉/G53而保留/03。。。
p = re.compile(r'/B00/(\d+)/A30/(\w+)(?:/E26/(\d+))?(?:/G53/(\d+))?')
这个看行不行。。。不过就是有空字段要处理一下了。。。高级点的正则我不会。。。看能凑合不
多谢啦,你写的不错,很清晰,空字段我是要的,再次表示感谢
不太明百你的意思 如果是拆分 应该很容易

>>> a = '/B00/20080624/A30/BNKACNBJ002/E26/01/G53/03'
>>> filter(lambda x: x, re.split('/\w\d{2}(?:/)?', a))
['20080624', 'BNKACNBJ002', '01', '03']
>>> b = filter(lambda x: x, map(lambda x:re.sub('^\w\d{2}$', '', x), map(lambda i: i.strip(), a.split('/'))))
>>> b
['20080624', 'BNKACNBJ002', '01', '03']

QUOTE:
求解字符串:str = 'A11B22C33D44E55'
例:拆解字符串

这里不要把str当变量名 str是一个内置函数
感谢你的回复
我需要处理的字符串是相对较比较复杂,串中既有按位截取也有按分隔串截取,都是根据报文配置定义的进行,其中分隔串的长度也不同,因此需要
将正则式动态拼接,可是还有一种情况报文中定义的某些分隔串有可能不会出现,这就要求正则式中必须要包含并容纳这种情况。
又有一个新的问题,如下(字符串/E26/属可选),之所以用 . 是因为不能确定数据类型 :
1。单行模式
str = '/B00/20080624/A30/BNKACNBJ002\r\n/E26/01/F20/20/G53/03'
p = re.compile(r'/B00/(.{8})/A30/(.+)(?:\r\n/E26/(.*))?/F20/(\w+)(?:/G53/(.+))?')
print p.findall(str)
>>>[('20080624', 'BNKACNBJ002', '01', '20', '03')]
2.多行模式
str = '/B00/20080624/A30/BNKACNBJ002\r\n/E26/01/F20/20/G53/03'
p = re.compile(r'/B00/(.{8})/A30/(.+)(?:\r\n/E26/(.*))?/F20/(\w+)(?:/G53/(.+))?',re.S)
print p.findall(str)
>>>[('20080624', 'BNKACNBJ002\r\n/E26/01', '', '20', '03')]

问题出来了,在多行匹配中在处理/A30/时截取出现了问题,主要由于可选/E26/导致的,而多行模式又是计划必须要使用的,请教这种正则式该怎么写啊