我有这样的表达:
(\D)((-?|\+?)\d+(\.\d+)?)?
这适用于我得到的大多数模式。但是,字符串中存在我根本无法获取的模式。我正在使用 Java 和 Spring Boot
这是应用正则表达式的字符串:
$1.0?8S0.0H692.8Q651.7u3.3o294.8n0t32.6s0R0.0P0.0Y114.9|136.3%1N-22.08930501E-48.05973392D692.374U0.0V0.00O0.0I6G0.20F12h0.000v0.000x1y1a24.0412e5.0690b0.00l0.0000r0.0000f0p4¨[email protected]º0|0|0|0=51.9988B1.0#0
很简单,获取第一个不是数字的字符,然后获取加号或减号字符,然后获取数字。如果存在浮点,则获取带有剩余数字的点。这是常见的模式。结果是这样的:
将其放入 HashMap 后。
但是有一部分我有多个数字要获取,用管道分隔:
Y114.9|136.3
º0|0|0|0
由于第一规则,这被解释为另一个值。
我想更改正则表达式来处理这个特定的规则。要得到这样的东西:
在此之后,我将开发一个逻辑将其放入数组中
感谢任何人的帮助
您可以将
\D
(将匹配除数字之外的任何字符)更改为更具体的否定字符类 [^\d\s.+-]
,排除更多字符。
对于具有重复管道
|
字符和数字的部分,您可以选择使用重复非捕获组。
如果您不想获取各个部分,则可以完全省略捕获组,只获取完整的匹配项。
您可以使用:
[^\d\s.+-][-+]?\d+(?:\.\d+)?(?:\|\d+(?:\.\d+)?)*
零件中的图案匹配:
[^\d\s.+-]
匹配除数字、空白字符或以下之一之外的单个字符 .
+
-
[-+]?
匹配可选的 -
或 +
\d+(?:\.\d+)?
将 1+ 位数字与可选的小数部分匹配(?:\|\d+(?:\.\d+)?)*
(可选)重复|
,后跟 1+ 位数字以及可选的小数部分查看 正则表达式演示