我需要一个正则表达式来匹配特定字符串,在下面的字符串中说1.4.5
。我的字符串就像
absdfsdfsdfc1.4.5kdecsdfsdff
我有一个正则表达式,它将[c1.4.5k]
作为输出。但我想只匹配1.4.5
。我试过这种模式:
[^\\W](\\d\\.\\d\\.\\d)[^\\d]
但没有运气。我正在使用Java。 请让我知道这种模式。
答案 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");
}