1

グループ一致のグループを抽出するために正規表現を変更していますが、この「スーパーグループ」は複合一致文字列を期待どおりに返しません。

照合する文字列は次の形式です。

/DIR/SOMESTRING-W0.12+345.raw.gz

と私が使用している正規表現:

/DIR/
(?P<super>
    (?P<name>.*?)
    (?=(?P<modifier>-W\d\.\d{2}[+-]\d{3})?\.(?P<extension>raw\.gz|root)$)
)

名前付きグループについて次の結果が得られます。

modifier: '-W0.12+345'
super: 'SOMESTRING'
name: 'SOMESTRING'
extension: 'raw.gz'

期待している間に

super: 'SOMESTRING-W0.12+345.raw.gz'

サブグループのグループ化は常に機能していましたが、今回は機能しませんでした。その理由がわかりません。

誰かが私にヒントをくれることを願っています。

注: この正規表現の説明は ( awk を使用して特定の部分文字列を正規表現と照合する)にあります。

4

1 に答える 1

2

グループは、グループsuperが一致するのと同じテキストに一致しますname。これは、先読みアサーションが一致に実際の文字を提供しないためです (そのため、「ゼロ幅アサーション」とも呼ばれます)。

望ましい結果を得るには、先読みアサーションを削除するだけです。

/DIR/
(?P<super>
    (?P<name>.*?)
    (?P<modifier>-W\d\.\d{2}[+-]\d{3})?\.(?P<extension>raw\.gz|root)$
)
于 2013-04-09T07:55:36.063 に答える