我需要一个正则表达式来匹配特定的字符串,比如1.4.5
下面的字符串。我的字符串会像
absdfsdfsdfc1.4.5kdecsdfsdff
我有一个正则表达式[c1.4.5k]
作为输出。但我只想匹配1.4.5
。我试过这种模式:
[^\\W](\\d\\.\\d\\.\\d)[^\\d]
但没有运气。我正在使用 Java。请让我知道模式。
当我正确阅读您的表达[^\\W](\\d\\.\\d\\.\\d)[^\\d]
时,您需要一个单词字符而不是前面的数字。那是对的吗?
为此,您可以使用lookbehind 和lookahead assertions。这些断言只检查它们的条件,但它们不匹配,因此结果中不包含这些东西。
(?<=\\w)(\\d\\.\\d\\.\\d)(?!\\d)
因此,您可以删除捕获组。您也在模式中重复自己,您也可以简化它:
(?<=\\w)\\d(?:\\.\\d){2}(?!\\d)
这将是我的模式。(这?:
是一个非捕获组)
使用向前看和向后看。
(?<=c)[\d\.]+(?=k)
其中 c 是紧接在 1.4.5 之前的字符,k 是紧接在 1.4.5 之后的字符。您可以用任何适合您目的的正则表达式替换 c 和 k
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");
}
你的要求很模糊。您是否需要将一系列正好 3 个数字与正好两个点匹配?
[0-9]+\.[0-9]+\.[0-9]+
可以写成
([0-9]+\.){2}[0-9]+
您是否需要匹配 x 多个大小写的数字,中间用 x-1 个点分隔?
([0-9]+\.)+[0-9]+
我认为这个应该这样做:([0-9]+\\.?)+
正则表达式
((?<!\d)\d(?:\.\d(?!\d))+)
作为 Java 字符串:
"((?<!\\d)\\d(?:\\.\\d(?!\\d))+)"