python 单引号 正则表示

前几日碰到一个字符匹配问题,整了个下午,也没整出来,无奈只好求助百度,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

 

你可能感兴趣的:(python,学习,python)