我一直在尝试以以下格式提取坐标集:
[-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:
问题已全部回答。非常感谢大家!
1条答案
按热度按时间fcg9iug31#
您的模式不匹配,因为
\d+[\.[\d]+]?
匹配一个或多个数字\d+
,后跟一个字符类[\.[\d]+
,该字符类重复匹配列出的字符中的一个,然后是可选的]
您可以使用3个捕获组来编写模式,可选的非捕获组为
(?:...)?
字符串
请参见regex demo。
一些符号注解:
[-]?
->-?
[\.]
->[.]
或\.
\d+[\.[\d]+]?
->我想你的意思是\d+[.\d]*
,其中[.\d]*
也可以只匹配点,因为字符类允许可选地重复列出的字符。有关符号,请参见character classes