ない千数を分離対正規表現は千の分離番号を区別するために

レニ:

私は、指定されたテキスト行の価格情報を抽出する必要があります。これまでのところ私は正規表現以下で成功した(\\d{1,3}(,\\d{3})*(\\.\\d+)?)ような行をJavaでprice will be 90,500 USD

しかし、今、私はまた、価格の開始前に別の番号を持つラインを持っています(eg: for order number 12345 the price will be 100,500 USD)この場合、私の価格抽出は失敗します。例えば、上記の私を与える123結果として。

私は正規表現を持つことができます/のみ価格情報を抽出するための別の方法にかかわらず、別の番号が存在するかどうか?(価格は常に千小数点ポイントの有無にかかわらず分離されます)

以下、私がこの仕事のために、今使っている完全なコードは次のとおりです。

private String getPrice(String fileText) {
    String lines[] = fileText.split(System.lineSeparator());

    for (String line : lines) {
        Pattern p = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+))");
        Matcher m = p.matcher(line);
        if (m.find()) {
            return m.group(0);
        }

        p = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+)?)");
        m = p.matcher(line);
        if (m.find()) {
            return m.group(0);
        }   
    }       
    return "";
}

私は試合が単語レベルであることを期待しています。(eg: 123 of 12345 should not match.)マイ単語の区切りがあるspaceのみ。123-456単一の単語と考えられています。だから、外の123456123-456123,456123,456.56A123456のみ123,456123,456.56一致している必要があります。問題は、私の現在のコードの抽出物で123123456123-456およびA123456

Wiktor第Stribiżav:

あなたの正規表現は、任意のコンテキストで番号と一致し、小数部分が義務付けられています。

私は提案します:

  • それは単語の文字で囲まれていない場合にのみ、番号をマッチング
  • fracion数部パターンの周囲に任意の非キャプチャグループを使用して。

使用する

Pattern p = Pattern.compile("\\b\\d{1,3}(?:,\\d{3})*(?:\\.\\d+)?\\b");

参照してください。正規表現のデモを

\bパターンは、ワード境界であり、(?:...)?中に(?:\\.\\d+)?1または0回繰り返される非キャプチャグループである、つまりはオプションです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=213846&siteId=1
おすすめ