Regex:如何在不使用子组的情况下获得坐标?

cwxwcias  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(89)

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

[-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+)?)\]


x1c 0d1x的数据
然而,我最初的选择并不奏效。为什么这些是无效的,以及如何在我的要求内创建正则表达式?
a:不将[\d]上的左括号注册为特殊字符,因此将右括号与[\.组件的左括号相关联

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



B:不将+符号注册为特殊字符

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



谢谢你的时间!

更新:

我现在已经知道了非捕获组的特性。
首先-谢谢!它做了我需要的工作。
第二,我仍然很好奇为什么其他的选择都不起作用,所以我会把这个问题留到接下来的24小时左右,至少。

更新v2:

问题已全部回答。非常感谢大家!

fcg9iug3

fcg9iug31#

您的模式不匹配,因为\d+[\.[\d]+]?匹配一个或多个数字\d+,后跟一个字符类[\.[\d]+,该字符类重复匹配列出的字符中的一个,然后是可选的]
您可以使用3个捕获组来编写模式,可选的非捕获组为(?:...)?

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

字符串
请参见regex demo
一些符号注解:

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

有关符号,请参见character classes

相关问题