前几日碰到一个字符匹配问题,整了个下午,也没整出来,无奈只好求助百度,python群,幸运的是碰到了扯淡群104497695(itianda管理员),呵呵
听着很扯,但是还是有高手的,这不这个问题解决了吗,所以分享下,为以后学习python的入门者分享点经验。
分析原因:没搞清楚 [ab]和ab的区别,[ab]是只要匹配[]中的任意一个,即a或者b,而ab是都匹配且必须是*ab*这样的格式,比如 acddbabcdd , [ab] 和ab的结果:
>>> n = 'acddbabcdd'
>>> patt = re.compile('[ab]')
>>> m = patt.search(n)
>>> m.group()
'a'
>>> patt = re.compile('ab')
>>> m = patt.search(n)
>>> m.group()
'ab'
>>>
要取出 a中LABEL中的值 'name=DLLS,tnam=ad'
>>> a = r"LABEL='name=DLLS,tnam=ad',UID='1222'"
>>> M = 'LABEL'
>>> patt = re.compile(M + "='(.+')',")
>>> m = patt.search(a)
>>> m
>>> patt = re.compile(M + "='(.+)',")
>>> m = patt.search(a)
>>> m
<_sre.SRE_Match object at 0x0122D960>
>>> m.group(1)
'name=DLLS,tnam=ad'
别急,要想得到UID的怎么办那?
改写
>>> patt = re.compile(M + "='(.+)',?")
表示,号可有可无。
>>> M = 'UID'
>>> m = patt.search(a)
>>> m.group(1)
'1222'
得到了想要的结果。
补充,要得到每一个= 号前的属性名值,可以这样写:
import re
a = r"LABEL='name=DLLS,tnam='ad'',UID='1222'"
re = re.compile("(([A-Z]+)='((.+')|([0-9]+))')")
m = re.findall(a)
for i in m:
print i[1] + ' = ' + i[2]
结果:
LABEL = name=DLLS,tnam='ad'
UID = 1222