【发布时间】:2021-11-08 06:32:59
【问题描述】:
我想要一个基于此规则匹配的正则表达式:搜索字符串中的第一个数字并检查它是否单独在其附近(数字前后的字符是 SPACE,或者之前的字符是 SPACE,它是字符串的结尾部分)。
以下几个例子:
-
ABC AB34.1 ABC 39.25 AB:39.25 -
ABC AB34.1 ABC 39.25:39.25 -
ABC 34.1AB ABC 39.25:39.25
我知道/^[^\d]*(\d+)/ 可以匹配字符串中的第一个数字,但我不知道如何检查它是否在其前后包含空格,或者在其之前和之后是否包含空格。
提前致谢。
【问题讨论】:
-
你可以使用
\b(?<!\d\.)\d+(?:\.\d+)?,见the demo。在 Java 中,您将需要if (matcher.find()) {并获得matcher.group()。 -
非常感谢,但是第一个呢?您编写的这个示例将匹配一个数字,如果它位于字符串的开头,无论它是否附加到一个字母。如果它是第一个,我们可以做些什么来完全忽略它吗?我知道我可以在 java 中检查索引,但我想知道在 RegEx 中是否可以。 @Wiktor Stribiżew
-
39.25不在ABC AB34.1 ABC 39.25 AB : 39.25的开头。您不是要求从字符串中提取第一个独立的浮点值吗?还是你想要^(?:.*?(\d+(?:\.\d+)?)){2}(demo) -
@WiktorStribiżew 谢谢。第一个效果很好,但是我有一个问题。我想要与第一个完全相同的东西(找到第一个独立的浮点值),但如果它位于字符串的开头,则忽略它。