0

次のような入力文字列があり、正規表現パターン(8 桁連続) に"hello, dflk 1234 12345678, wod-=0, 87654321"対応しないすべての「単語」のリストを取得したいと考えています。"\d{8}"

java.util.regex api docを調べましたが、正規表現 "\d{8}" の否定をまとめる方法が見つかりませんでした 。これが私がそれを使用したい方法です:

String input = "hello, dflk 1234 12345678, wod-=0, 87654321";
List<String> hitList = new ArrayList<>();
Pattern p = Pattern.compile(...?...); //<- how to define the regex pattern?
Matcher m = p.matcher(input);
while(m.find()) {
    hitList.add(m.group());
}

(上記の入力文字列に基づいて) hitList にこれらすべてを含めたいと思います。

"hello,"  "dflk"  "1234"  ","  "wod-=0,"

その正規表現パターンを定義する方法を提案できますか?

4

3 に答える 3

0

パターンが見つかったソース文字列を空の文字列に置き換えてから、文字列分割関数を使用してパターン以外のすべての文字列を取得しました

String test = "hello, dflk 1234 12345678, wod-=0, 87654321";
            test = test.replaceAll("\\d{8}", "");
            String result[] = test.split("\\ ");
            for (String value : result) {
                System.out.println(value);
            }
        }

上記のソリューションをテストしました。
これがお役に立てば幸いです。

于 2012-08-21T06:26:07.680 に答える
0

これは、探している正規表現である可能性があります (文字列に入れるときは \ をエスケープする必要があることに注意してください)。

(?<!\s)(?!\d{8}(\s|$))\S+
于 2012-08-21T06:29:17.240 に答える
0

1 つの方法 (おそらく最も簡単な方法) は、結果の一致リストをフィルター処理することです。

もう 1 つは、否定的な先読みといくつかのルックアラウンドです。

(?<=^|\s|\d{8})(?!\d{8})\S+(?=$|\s|\d{8})

かわいいは違うと思います。

クイック PowerShell テスト:

PS Home:\> [regex]::Matches('hello, dflk 1234 12345678, wod-=0, 87654321', '(?<=^|\s|\d{8})(?!\d{8})\S+(?=$|\s|\d{8})')|
select -exp Value
hello,
dflk
1234
,
wod-=0,
于 2012-08-21T06:13:07.127 に答える