前幾日碰到一個字符匹配問題,整了個下午,也沒整出來,無奈只好求助百度,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