0

ユーザー文字列から2つの数値を抽出しようとしています。正規表現は機能していますが、2番目の数値キャプチャは十分に貪欲ではありません!これを自分のニーズに合わせて再フォーマットする方法がわかりません。正規表現を送信しています。アドバイスがあれば素晴らしいです。

QRegExp valid_input(".*(-?\\d*\\.?\\d+)[\\s,]+(-?\\d*.?\\d+)[^\d]*");
valid_input.setMinimal(true);

if(valid_input.indexIn(value.toString()) == -1)
    return false;

QPointF new_point(valid_input.cap(1).toDouble(), valid_input.cap(2).toDouble());

前もって感謝します!


入力例: 156, 264

期待される出力: 156および264

私の出力: 156そして2


入力例: 156.2 264.52

期待される出力: 156.2および264.52

私の出力: 156そして2


入力例: 156.2 264.52)

期待される出力: 156.2および264.52

私の出力: 156そして2

4

2 に答える 2

2

2つのポイント:

  • マニュアルからAFAICSを使用すると、先頭の「。*」と末尾の「[^ \d]*」を削除できます。
  • setMinimal(true)貪欲ではない正規表現の設定について話します。

それ以外の場合(サンプルデータがないため)、正規表現は正常に見えます。

http://www.regular-expressions.info/floatingpoint.html

[-+]?[0-9] * \。?[0-9] +

これは基本的に正規表現であり、オプションのプラス記号が追加されています。

これに代わる方法として、正規表現を複数のより単純な部分に分割することもできます。

([-+]?\。\ d + | [-+]?\ d+\。\d* | [-+]?\ d +)

于 2012-11-01T22:31:30.877 に答える
1

あなたの正規表現はあなたの例でうまく機能します。最小限のマッチングを有効にしないでください。期待どおりの結果が得られます。

于 2012-11-01T22:48:07.810 に答える