3

私はLuaの初心者です。そして、次のようなテキストを解析したい

Phase1:A B Phase2:A B Phase3:W O R D Phase4:WORD

Phase1         Phase2      Phase3     Phase4

A              A B         W O R D    WORD

私は使用しましstring.gmatch(s, "(%w+):(%w+)")た、私は得ることができます

Phase1     Phase2     Phase3       Phase4

A          A          W            WORD

行方不明の B、O、R、D を取り戻すにはどうすればよいですか?
または、フェーズごとにパターンを記述する必要がありますか? どうやってするか?

4

2 に答える 2

4

あなたの例の入力テキストには、フレーズ間に明確な区切り文字がないため、正規表現で正確に解析するのは難しいです。

,句を区切るためにa のような区切り記号を追加すると、解析がはるかに簡単になります。

Phrase1:A B, Phrase2:A B, Phrase3:W O R D,Phrase4:WORD

次に、次のパターンで解析できます。

s = "Phrase1:A B, Phrase2:A B, Phrase3:W O R D,Phrase4:WORD"

for k, v in s:gmatch "(Phrase%d+):([^,]+)" do
    print(k, v)
end

出力:

Phrase1 A B
Phrase2 A B
Phrase3 W O R D
Phrase4 WORD

上記の制約を緩和できない場合は、次のパターンを試すことができます。

  s:gmatch "Phrase%d+:%w[%w ]* "

このパターンには警告があることに注意してください。解析する文字列の末尾に余分なスペースが必要です。そうしないと、最後のフレーズが解析されません。

于 2013-06-15T00:59:02.827 に答える