0

ファイルに次のような行があります。

Location### Location### #

Location は都市を表す文字列で、スペースは + です ("St.+Louis,+MO" など)。# は数字です。次の正規表現パターンを使用して、場所と数字 (このネットワーク トポロジ ファイル内の一意のノード ID を表す) を取得しようとしています。

START "([A-Za-z,+.]+)([0-9]+)" SPACE "([A-Za-z,+.]+)([0-9]+)" SPACE "([0-9.]+)" MAYSPACE END

C++ regex ライブラリの使用 (Ubuntu Linux 上)。マクロは、一致するがスペースをキャプチャしないように適切に定義されています (MAYSPACE は 0 個以上の空白文字に一致します)。

私が遭遇している問題は、数字のグループが完全に空であることです! この正規表現を sed に入れると:

sed -rn 's/^([A-Za-z.+,]+)([0-9]+)/\1 \2/p' rocketfuel/weights/6461/latencies.intra

期待どおりに機能し、都市名とノード ID の両方を取得します! さらに、代わりに次の試合を試してみると:

START "([A-Za-z,+.]+).([0-9]+)" SPACE "([A-Za-z,+.]+).([0-9]+)" SPACE "([0-9.]+)" MAYSPACE END

ノード ID はキャプチャされますが、明らかに最初の桁がありません。そこに \B 非単語境界アンカーを入れようとしましたが、うまくいきませんでした...

一致しない隣接グループでこの問題に遭遇した人はいますか? それを修正する方法について何か提案はありますか?実際のC++ライブラリのバグのようです...

Boost やその他の外部ライブラリを避けようとしているので、今のところ sed を使用して場所とノード ID の間にスペースを追加します。

4

0 に答える 0