2

1.4.5以下の string のように、特定の文字列に一致する正規表現が必要です。私の文字列は次のようになります

absdfsdfsdfc1.4.5kdecsdfsdff 

出力として与える正規表現があり[c1.4.5k]ます。しかし、私は一致したいだけ1.4.5です。私はこのパターンを試しました:

[^\\W](\\d\\.\\d\\.\\d)[^\\d] 

しかし、運がありません。私はJavaを使用しています。パターンを教えてください。

4

6 に答える 6

1

私があなたの式[^\\W](\\d\\.\\d\\.\\d)[^\\d]を正しく読むと、数字の前ではなく単語の文字が前に必要になります。あれは正しいですか?

そのために、後読みアサーションと先読みアサーションを使用できます。これらのアサーションは条件をチェックするだけですが、一致しないため、その内容は結果に含まれません。

(?<=\\w)(\\d\\.\\d\\.\\d)(?!\\d)

そのため、キャプチャ グループを削除できます。また、パターンで自分自身を繰り返しています。これも単純化できます。

(?<=\\w)\\d(?:\\.\\d){2}(?!\\d)

それが私のパターンになります。(これ?:は非キャプチャ グループです)

于 2012-10-15T06:35:45.300 に答える
0

要件はあいまいです。一連の正確に3つの数字を正確に2つのドットと一致させる必要がありますか?

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

これは次のように書くことができます

([0-9]+\.){2}[0-9]+

間にx-1ドットで区切られた、数のx個のケースを一致させる必要がありますか?

([0-9]+\.)+[0-9]+
于 2012-10-15T06:26:35.267 に答える
0

ルックアヘッドとルックバックを使用します。

(?<=c)[\d\.]+(?=k)

c は 1.4.5 の直前の文字で、k は 1.4.5 の直後の文字です。c と k は、目的に合った正規表現に置き換えることができます

于 2012-10-15T06:37:18.517 に答える
0
String str= "absdfsdfsdfc**1.4.5**kdec456456.567sdfsdff22.33.55ffkidhfuh122.33.44"; 
String regex ="[0-9]{1}\\.[0-9]{1}\\.[0-9]{1}";  
Matcher matcher = Pattern.compile( regex ).matcher( str);                    
if (matcher.find())
{
String year = matcher.group(0);

System.out.println(year);
}
else
{
    System.out.println("no match found");
}
于 2012-10-15T11:46:00.350 に答える
0

私はこれがそれを行うべきだと思います:([0-9]+\\.?)+

于 2012-10-15T06:03:35.050 に答える
0

正規表現

((?<!\d)\d(?:\.\d(?!\d))+)

Java 文字列として:

"((?<!\\d)\\d(?:\\.\\d(?!\\d))+)"
于 2012-10-15T06:03:37.547 に答える