如何在不使用子组的情况下获取正则表达式坐标?

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

我一直在尝试以以下格式提取坐标集:

[-34.0, 23, 0.555] , [3, 4, 5], ....

对于第一组,我希望提取“-34.0”、“23”和“0.555”。对于第二组,“3”、“4”和“5”。

我在 stackoverflow 上找到了一种方法,并通过我自己在 https://regexr.com 上的实验,但这意味着“.0”和“.555”也将被提取为子组,这是我不希望的。

\[([-]?\d+(\.\d+)?),\s([-]?\d+(\.\d+)?),\s([-]?\d+(\.\d+)?)\]

但是,我最初的替代方案不起作用。为什么这些无效,以及如何根据我的要求创建正则表达式?

a:不将

[\d]
上的左括号注册为特殊字符,从而将右括号与
[\.
组件的左括号相关联

\[([-]?\d+[\.[\d]+]?),\s([-]?\d+[\.[\d]+]?),\s([-]?\d+[\.[\d]+]?)\]

b:不将

+
符号注册为特殊字符

\[([-]?\d+[\.\d+]?),\s([-]?\d+[\.\d+]?),\s([-]?\d+[\.\d+]?)\]

感谢您的宝贵时间!

更新:

我现在已经了解了非捕获组功能。

首先——谢谢!它完成了我需要的工作。

其次 - 我仍然很好奇为什么其他选项不起作用,所以我至少会在接下来的 24 小时左右的时间内将其保留。

regex regex-group
1个回答
0
投票

您的模式不匹配,因为

\d+[\.[\d]+]?
匹配一个或多个数字
\d+
,后跟字符类
[\.[\d]+
,重复匹配列出的字符,然后是可选的
]

您可以使用 3 个捕获组以及可选的非捕获组来编写模式

(?:...)?

\[(-?\d+(?:\.\d+)?),\s(-?\d+(?:\.\d+)?),\s(-?\d+(?:\.\d+)?)]

查看 正则表达式演示

一些注释:

  • [-]?
    --->
    -?
  • [\.]
    --->
    [.]
    \.
  • \d+[\.[\d]+]?
    ---> 我认为您的意思是
    \d+[.\d]*
    ,其中
    [.\d]*
    也可以仅匹配点,因为字符类允许可选地重复列出的字符。

有关表示法,请参阅字符类

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