正则表达式,在第二次出现点后得到数字

时间:2013-11-09 22:30:01

标签: regex regex-greedy

我希望在字符串中的第二个点之后得到一个数字: 的 4.5.3。某种问题?但是输入字符串可能看起来像 41.53.32。某种问题?所以我的目标是第一个例子中的 3 和第二个例子中的 32

我正在尝试用

(?<=(\.\d\.))[0-9]+ 

并且它适用于第一个示例,但是当我尝试添加(?<=(\.\d+\.))[0-9]+时 它根本不起作用。

5 个答案:

答案 0 :(得分:-1)

如果最终号码后面总是有一个点,那么您可以使用以下表达式:

\d+(?=\.(?:[^\d]|$))

这将匹配一个或多个数字\d+,后跟一个点.,然后是一个不是字符串结尾[^\d]的数字$的数字},即(?=\.(?:[^\d]|$))

Regex101 Demo

答案 1 :(得分:-1)

(?:(?:.*\.)?){2}(\d+)

以下正则表达式适用于您的用例。

查看 here

答案 2 :(得分:-1)

如果您使用PERL或PHP,则可以尝试以下模式:

(?:\d+\.){2}\K\d+

答案 3 :(得分:-1)

(\d+.\d+.)\K\d+

匹配数字点位数点数,第一部分为未选中的组。

答案 4 :(得分:-1)

最简单的完整答案可能是这样的:

(?<=^(?:[^.]*\.){2})\d+

如果你一直担心表现,这个会稍快一点:

^(?:[^.]*\.){2}(\d+)

这个将在捕获组1时捕获所需的值。

如果您使用的引擎不支持可变长度的lookbehind,则需要使用第二个版本。

如果您愿意,可以将[^.]替换为\d,仅匹配数字。