2

我需要一个正则表达式来匹配特定的字符串,比如1.4.5下面的字符串。我的字符串会像

absdfsdfsdfc1.4.5kdecsdfsdff 

我有一个正则表达式[c1.4.5k]作为输出。但我只想匹配1.4.5。我试过这种模式:

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

但没有运气。我正在使用 Java。请让我知道模式。

4

6 回答 6

1

当我正确阅读您的表达[^\\W](\\d\\.\\d\\.\\d)[^\\d]时,您需要一个单词字符而不是前面的数字。那是对的吗?

为此,您可以使用lookbehind 和lookahead assertions。这些断言只检查它们的条件,但它们不匹配,因此结果中不包含这些东西。

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

因此,您可以删除捕获组。您也在模式中重复自己,您也可以简化它:

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

这将是我的模式。(这?:是一个非捕获组)

于 2012-10-15T06:35:45.300 回答
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

你的要求很模糊。您是否需要将一系列正好 3 个数字与正好两个点匹配?

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

可以写成

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

您是否需要匹配 x 多个大小写的数字,中间用 x-1 个点分隔?

([0-9]+\.)+[0-9]+
于 2012-10-15T06:26:35.267 回答
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 回答