帮助特定的Python重新应用程序

时间:2011-04-05 16:31:47

标签: python regex parsing

人, 我正在使用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。?”,

至少与我预期的次数匹配,但是我无法将其与数字相匹配

2 个答案:

答案 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 ,您可以扣除任何您想要的演示文稿