获取特定组的正则表达式

问题描述 投票:0回答:1

我有这样的表达:

(\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

很简单,获取第一个不是数字的字符,然后获取加号或减号字符,然后获取数字。如果存在浮点,则获取带有剩余数字的点。这是常见的模式。结果是这样的:

  • $ - 1.0
  • ? - 8
  • S - 0.0
  • = - 51.9988
  • t - 32.6

将其放入 HashMap 后。

但是有一部分我有多个数字要获取,用管道分隔:

  • Y114.9|136.3

  • º0|0|0|0

由于第一规则,这被解释为另一个值。

我想更改正则表达式来处理这个特定的规则。要得到这样的东西:

  • Y - 114.9 | 136.3
  • º - 0 | 0 | 0 | 0

在此之后,我将开发一个逻辑将其放入数组中

感谢任何人的帮助

java regex regex-group
1个回答
0
投票

您可以将

\D
(将匹配除数字之外的任何字符)更改为更具体的否定字符类
[^\d\s.+-]
,排除更多字符。

对于具有重复管道

|
字符和数字的部分,您可以选择使用重复非捕获组。

如果您不想获取各个部分,则可以完全省略捕获组,只获取完整的匹配项。

您可以使用:

[^\d\s.+-][-+]?\d+(?:\.\d+)?(?:\|\d+(?:\.\d+)?)*

零件中的图案匹配:

  • [^\d\s.+-]
    匹配除数字、空白字符或以下之一之外的单个字符
    .
    +
    -
  • [-+]?
    匹配可选的
    -
    +
  • \d+(?:\.\d+)?
    将 1+ 位数字与可选的小数部分匹配
  • (?:\|\d+(?:\.\d+)?)*
    (可选)重复
    |
    ,后跟 1+ 位数字以及可选的小数部分

查看 正则表达式演示

© www.soinside.com 2019 - 2024. All rights reserved.