需要正则表达式匹配给定的字符串

时间:2012-10-15 05:57:29

标签: java regex

我需要一个正则表达式来匹配特定字符串,在下面的字符串中说1.4.5。我的字符串就像

absdfsdfsdfc1.4.5kdecsdfsdff 

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

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

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

6 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分:0)

我认为应该这样做:([0-9]+\\.?)+

答案 2 :(得分:0)

正则表达式

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

作为Java字符串:

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

答案 3 :(得分:0)

您的要求含糊不清。你需要匹配一系列正好3个数字和两个点吗?

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

可以写成

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

你是否需要匹配x的多个数字,在两者之间用x-1点分隔?

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

答案 4 :(得分:0)

使用前瞻并向后看。

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

其中c是紧接在1.4.5之前的字符,k是紧接在1.4.5之后的字符。您可以使用适合您目的的任何正则表达式替换c和k

答案 5 :(得分: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");
}