3

私は非常に新しい pyparsing ユーザーであり、理解できない一致がありません:

解析したいテキストは次のとおりです。

polraw="""
set policy id 800 from "Untrust" to "Trust"  "IP_10.124.10.6" "MIP(10.0.2.175)" "TCP_1002" permit
set policy id 800
set dst-address "MIP(10.0.2.188)"
set service "TCP_1002-1005"
set log session-init
exit
set policy id 724 from "Trust" to "Untrust"  "IP_10.16.14.28" "IP_10.24.10.6" "TCP_1002" permit
set policy id 724
set src-address "IP_10.162.14.38"
set dst-address "IP_10.3.28.38"
set service "TCP_1002-1005"
set log session-init
exit
set policy id 233 name "THE NAME is 527 ;" from "Untrust" to "Trust"  "IP_10.24.108.6" "MIP(10.0.2.149)" "TCP_1002" permit
set policy id 233
set service "TCP_1002-1005"
set service "TCP_1006-1008"
set service "TCP_1786"
set log session-init
exit

"""

私はこのように文法をセットアップします:

KPOL  = Suppress(Keyword('set policy id'))
NUM   = Regex(r'\d+')
KSVC  = Suppress(Keyword('set service'))
KSRC  = Suppress(Keyword('set src-address'))
KDST  = Suppress(Keyword('set dst-address'))
SVC    = dblQuotedString.setParseAction(lambda t: t[0].replace('"',''))
ADDR   = dblQuotedString.setParseAction(lambda t: t[0].replace('"',''))
EXIT  = Suppress(Keyword('exit'))
EOL = LineEnd().suppress()

P_SVC = KSVC + SVC + EOL
P_SRC = KSRC + ADDR + EOL
P_DST = KDST + ADDR + EOL

x = KPOL + NUM('PId') + EOL + Optional(ZeroOrMore(P_SVC)) + Optional(ZeroOrMore(P_SRC)) + Optional(ZeroOrMore(P_DST)) 

for z in x.searchString(polraw):
    print z

結果セットは次のようなものです

['800', 'MIP(10.0.2.188)']
['724', 'IP_10.162.14.38', 'IP_10.3.28.38']
['233', 'TCP_1002-1005', 'TCP_1006-1008', 'TCP_1786']

800にはサービスタグがありません???

ここで何が問題なのですか。

事前に感謝 ローラン

4

1 に答える 1