0

動的に変化するテキストがあり、その中のいくつかの部分を見つける方法が必要です。特にこれらのように:

+124今

+78今

+45今

したがって、私の値は常に「+」プラス記号で始まり、いくつかの数字、最小1つ、そして「今」の単語です。

私はこのような多くの方法を試しました:

if(myString.contains("+[0-9]+now")) //false

でもうんざりしました...手伝ってくれませんか?

4

6 に答える 6

9

String#matches()代わりに使用してください:

if (myString.matches(".*\\+[0-9]+now.*"))

また、+これは特別な正規表現文字であるため、エスケープする必要があります。

数字をキャプチャする必要がある場合は、とを使用PatternしてMatcherください:

Pattern p = Pattern.compile("\\+([0-9]+)now");
Matcher m = p.matcher(myString);
while (m.find()) {
  System.out.println(m.group(1));
}

()はキャプチャグループです。つまり、一致したコンテンツを保存するように正規表現エンジンに指示するため、後で.を使用してコンテンツを取得できますgroup()

于 2012-08-29T13:07:52.577 に答える
6

これを試して......

Pattern pat = Pattern.compile("\\+\\d+now");
Matcher mat = pat.matcher("Input_Text");

while(mat.find()){

   // Do whatever you want to do with the data now...

 }
于 2012-08-29T13:09:20.263 に答える
3

次のように最初の「+」をエスケープする必要があります。

if(myString.matches("\\+[0-9]+now"));

+は、「この文字を1回以上検索する」ではなく、「文字列内で+を文字通り検索する」ことを意味します。

于 2012-08-29T13:08:26.613 に答える
2

文字列と一致させるか、中央の数字を抽出するかを想定していますか?あなたの場合、問題は+私たちが特殊文字であるということです、それであなたはそれを次のようにエスケープする必要があります:\\+、それであなたの正規表現はになり\\+[0-9]+nowます。

2番目の問題については、.containsメソッドが正規表現ではなく文字列を受け取るため、コードが機能しません。

    String str = "+124now";
    Pattern p = Pattern.compile("\\+(\\d+)now");
    Matcher m = p.matcher(str);

    while (m.find())
    {
        System.out.println(m.group(1));         
    }

この場合、これがあなたが求めているものである場合に備えて、私は数字を抽出しました。

于 2012-08-29T13:11:08.583 に答える
1

このメソッドcontainsは、引数を正規表現として解釈しません。matches代わりにこの方法を使用してください。+次のように、同様にエスケープする必要があります。

if (myString.matches("\\+\\d+now"))
于 2012-08-29T13:09:30.863 に答える
1

+文字列は常にで始まり、常に終わると言ったのでnow、これが正しいことを確認してください。そうでない場合は、何かが間違っています。

    String[] vals = {"+124now", "+78now", "-124now", "+124new"};

    for (String s : vals) {
        if (s.matches("^\\+(\\d+)now$")) {
            System.out.println(s + " matches.");
        } else {
            System.out.println(s + " does not match.");
        }
    }

もちろん、番号を取得したい場合は、npintiが提案するようなマッチャーを使用してください。

編集:番号を取得する方法は次のとおりです。

    Pattern p = Pattern.compile("^\\+(\\d+)now$");
    for (String s : vals) {
        Matcher m = p.matcher(s);
        if (m.matches()) {
            System.out.println(s + " matches and the number is: " + m.group(1));
        } else {
            System.out.println(s + " does not match.");
        }
    }
于 2012-08-29T13:18:21.763 に答える