3

私はそのような文字列を持っているとしましょう:

eXamPLEstring>1.67>>ReSTOfString

私の仕事は、上記の文字列から 1.67 だけを抽出することです。

正規表現は便利だと思いますが、適切な式の書き方がわかりません。

4

7 に答える 7

9

からすべてIntとを抽出したい場合は、私FloatString解決策に従うことができます:

private ArrayList<String> parseIntsAndFloats(String raw) {

    ArrayList<String> listBuffer = new ArrayList<String>();

    Pattern p = Pattern.compile("[0-9]*\\.?[0-9]+");

    Matcher m = p.matcher(raw);

    while (m.find()) {
        listBuffer.add(m.group());
    }

    return listBuffer;
}

負の値も解析したい場合は[-]?、次のようにパターンに追加できます。

    Pattern p = Pattern.compile("[-]?[0-9]*\\.?[0-9]+");

,また、セパレーターとしても設定したい場合は、次,?のようにパターンに追加できます。

    Pattern p = Pattern.compile("[-]?[0-9]*\\.?,?[0-9]+");

.

パターンをテストするには、次のオンライン ツールを使用できます: http://gskinner.com/RegExr/

:このツールでは、私の例を試している場合は忘れずにエスケープしないでください(いずれかを外す必要があるだけです\

于 2013-06-22T01:28:20.920 に答える
3

正規表現を使用して数字を一致させることができます

\\d+\\.\\d+

これは次のようになります

Pattern p = Pattern.compile("\\d+\\.\\d+");
Matcher m = p.matcher("eXamPLestring>1.67>>ReSTOfString");
while (m.find()) {
    Float.parseFloat(m.group());
}
于 2012-09-02T09:58:24.390 に答える
3

これを1行で行う方法は次のとおりです。

String f = input.replaceAll(".*?([\\d.]+).*", "$1");

実際に が必要な場合はfloat、次のように 1 行で行います。

float f = Float.parseFloat(input.replaceAll(".*?([\\d.]+).*", "$1")),
于 2013-06-22T02:59:51.773 に答える
2
    String s = "eXamPLestring>1.67>>ReSTOfString>>0.99>>ahgf>>.9>>>123>>>2323.12";
    Pattern p = Pattern.compile("\\d*\\.\\d+");
    Matcher m = p.matcher(s);
    while(m.find()){
        System.out.println(">> "+ m.group());
    }

フロートのみを与える

>> 1.67
>> 0.99
>> .9
>> 2323.12
于 2012-09-02T09:58:07.220 に答える
1

正規表現を使用できます\d*\.?,?\d*これは、1.0や1,0などのフロートで機能します

于 2012-09-02T09:58:23.600 に答える
1
/**
 * Extracts the first number out of a text.
 * Works for 1.000,1 and also for 1,000.1 returning 1000.1 (1000 plus 1 decimal).
 * When only a , or a . is used it is assumed as the float separator.
 *
 * @param sample The sample text.
 *
 * @return A float representation of the number.
 */
static public Float extractFloat(String sample) {
    Pattern pattern = Pattern.compile("[\\d.,]+");
    Matcher matcher = pattern.matcher(sample);
    if (!matcher.find()) {
        return null;
    }

    String floatStr = matcher.group();

    if (floatStr.matches("\\d+,+\\d+")) {
        floatStr = floatStr.replaceAll(",+", ".");

    } else if (floatStr.matches("\\d+\\.+\\d+")) {
        floatStr = floatStr.replaceAll("\\.\\.+", ".");

    } else if (floatStr.matches("(\\d+\\.+)+\\d+(,+\\d+)?")) {
        floatStr = floatStr.replaceAll("\\.+", "").replaceAll(",+", ".");

    } else if (floatStr.matches("(\\d+,+)+\\d+(.+\\d+)?")) {
        floatStr = floatStr.replaceAll(",", "").replaceAll("\\.\\.+", ".");
    }

    try {
        return new Float(floatStr);
    } catch (NumberFormatException ex) {
        throw new AssertionError("Unexpected non float text: " + floatStr);
    }
}
于 2019-03-30T20:19:45.650 に答える
1

このリンクを見てください。また、そのような正規表現を作成するときに留意する必要があるいくつかのことについても説明しています。

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

コード例:

String[] strings = new String[3];

    strings[0] = "eXamPLestring>1.67>>ReSTOfString";
    strings[1] = "eXamPLestring>0.57>>ReSTOfString";
    strings[2] = "eXamPLestring>2547.758>>ReSTOfString";

    Pattern pattern = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+");

    for (String string : strings)
    {
        Matcher matcher = pattern.matcher(string);
        while(matcher.find()){
            System.out.println("# float value: " + matcher.group());
        }
    }

出力:

# float value: 1.67
# float value: 0.57
# float value: 2547.758
于 2012-09-02T10:20:14.853 に答える