人, 我正在使用Python re来解析包含这样的行的配置文件: [VAR:abc123] ... ...
.CSIIND~~~LOCAL~~~I4~~~0~~~
[VAR: def234]
...
<bunch of stuff>
...
.CSIIND ~~~ LOCAL ~~~ I4 ~~~ 1 ~~~
...
我正在努力提取这样的东西:
varname / CSIIND
abc123 / 0
def234 / 1
......
我没有很多正则表达式的背景,所以我可能有点慢,但我一直在寻找我能找到的每一个教程和资源,但无济于事。
请帮助我,至少有方向性建议!我不是要求完成代码!
我得到的最远的是这个正则表达式:
R “^ [VAR:+?] + CSIIND。?”,
至少与我预期的次数匹配,但是我无法将其与数字相匹配
答案 0 :(得分:0)
需要更多细节。变量是“var”括在方括号中的东西吗?用“:”之前的名字和后面的值一切? [foo:“Mr Bar's Foo shop”]
如果是这样,你可能只能拆分“:”而不是打扰复杂的正则表达式。
好的看看:
import re
stuff0='[stuff:junk]'
stuff1=stuff0[1:-1] # Knock off the brackets
stuff2=re.split(':', stuff) # Split the name from value
stuff3=stuff2[0]+'/'+stuff2[1] # Recombine into your requested format
print stuff3
'stuff/junk'
为了清楚起见,我把它分成了很多行。你可以将几个步骤拉成一行。
答案 1 :(得分:0)
也许这比你要求的要多:
ch = '''[VAR: abc123]
hhhgfgfjhfghjf
... ...
.CSIIND~~~LOCAL~~~I4~~~0~~~
[VAR: def234]
...
<bunch of stuff>
...
......
.CSIIND~~~LOCAL~~~I4~~~1~~~
llhgjgj
[VAR: ab1587]
hhhgfgfjhfghjf
... ...
.Cosoo~~~LOCAL~~~I4~~~120~~~
zhbyi,i,uy_o
[VAR: abc123]
hhhgfgfjhfghjf
... ...
.CUSUT~~~LOCAL~~~I4~~~28~~~
[VAR: def234]
...
<bunch of stuff>
...
......
.CUSUT~~~LOCAL~~~I4~~~45~~~'''
import re
from itertools import groupby
from operator import itemgetter
RE = ('\[([^:]+):\s+([^\]]+)\]\s*[\r\n]+'
'(?:.+[\r\n]+)*?'
'\.([^~\r\n]+?)~~~[^~]+~~~[^~]+~~~(\d+)~~~')
pat = re.compile(RE,re.MULTILINE)
li = [ (k,[tuple(x)[1::2] for x in g]) for k,g in groupby(pat.findall(ch),key=itemgetter(2))]
for y in li:
print y
结果
('CSIIND', [('abc123', '0'), ('def234', '1')])
('Cosoo', [('ab1587', '120')])
('CUSUT', [('abc123', '28'), ('def234', '45')])
从 li ,您可以扣除任何您想要的演示文稿