例子如下:
<element abc="123" def="456" ghi="789"/>
有一个如上的字符串,其中abc
、def
、ghi
的位置有可能并非按照这个顺序排列的(例如<element abc="123" ghi="789" def="456"/>
),也有可能缺少部分属性(如<element ghi="789" def="456"/>
),请问能否实现无论这几个属性如何排列,都能够将他们的值(指的是123、456、789)提取出来?
例子如下:
<element abc="123" def="456" ghi="789"/>
有一个如上的字符串,其中abc
、def
、ghi
的位置有可能并非按照这个顺序排列的(例如<element abc="123" ghi="789" def="456"/>
),也有可能缺少部分属性(如<element ghi="789" def="456"/>
),请问能否实现无论这几个属性如何排列,都能够将他们的值(指的是123、456、789)提取出来?
Why it's not possible to use regex to parse HTML/XML: a formal explanation in layman's terms: @StackOverflow
Python
s = '<element def="8972" abc="dsfasdfasfdasf"/>' re.findall(r'(abc|def|ghi)="(.*?)"', s) # [('def', '8972'), ('abc', 'dsfasdfasfdasf')]
这里献上一个笨方法:
sed 's/.*abc="\([0-9]*\).*/\1/g' filename sed 's/.*def="\([0-9]*\).*/\1/g' filename sed 's/.*ghi="\([0-9]*\).*/\1/g' filename
得到每个属性的值,然后整合起来。
我使用PHP来做吧,说说我的做法, 分3次做, 所以不会有问题:
这个只能解决问题, 非完美解答。
分割线请教朋友后得出完美解答,PHP版本: