Regex 正则表达式:返回不超过两个特定字符的字符串

Regex 正则表达式:返回不超过两个特定字符的字符串,regex,Regex,我有数百个包含数字数组的文件。阵列大小不同。我需要确定哪些数组只有三个元素,并提取它们的值 以下是一些例子: askjdh fdshajkjashf hjd ([123, 2321, 321, 123, 3425.98]); askjdh ljkjsd hjd ([123, 2321, 321.345]); askjdh w;klejfjk hjd ([123, 2321, 321.345]); % aksdhj askjdh ljkjsd hjd ([ 13, 21 , -4

我有数百个包含数字数组的文件。阵列大小不同。我需要确定哪些数组只有三个元素,并提取它们的值

以下是一些例子:

askjdh fdshajkjashf hjd ([123, 2321, 321, 123, 3425.98]);

askjdh    ljkjsd hjd ([123, 2321, 321.345]);

askjdh w;klejfjk hjd ([123, 2321, 321.345]); % aksdhj

askjdh ljkjsd hjd ([   13, 21  , -45]);
上面的两个匹配项应为:

askjdh ljkjsd hjd ([123, 2321, 321.345]);

askjdh ljkjsd hjd ([   13, 21  , -45]);
其值为:

123, 2321, 321.345

13, 21, -45
我原以为这样行得通,但事实并非如此:

\[(.*),(.*),(^[^,].*$)\]
这确实有效。。。但它看起来相当笨重。也许还有更优雅的

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

您可以使用这样的正则表达式:

\[\s*(?:-?\d*\.?\d+\s*,\s*){2}-?\d*\.?\d+\]


它与您的正则表达式类似,但使用
{2}
符号可以将其缩短一点。

因为您要查找的正是三个元素,所以可以使用
/\[^,]+,*[^,]+,*[^\]+*\]/

\[[^,]+, *[^,]+, *[^\]]+ *\]

以下是我尝试做的事情:

\[
  \s*
  (?:
    \s*
    (\d+(?:\.\d+)?)
    \s*\,\s*
  )+
  (?: # this is supposed to match the last number, which is not followed by a ","
    \s*
    (\-?\d+(?:\.\d+)?)
    \s*
  )?
\]


但出于某种原因,我只得到最后两个数字(查看右侧的“匹配信息”),而不是所有数字。

使用此模式w/
gm
选项仅提取3个元素及其值

\(\[\s*([^, ]+)\s*,\s*([^, ]+)\s*,\s*([^, ]+)\s*\]\);$

您使用哪种语言?在java中,获取数组的长度是“array.length”,然后获取其值是“array[0];数组[1]等。这就是你想要的吗?语言:我正在使用BareGrep搜索所有文件。你能发布到regex101的链接吗?我试过像你一样的东西,但我认为OP想要得到数字(这让我使用了在你的答案中看不到的大括号)。编辑:是的,我看到了链接,谢谢:)@Al.G。好了:)嘿,托比,你甚至可以用:
/\[(*[^,]+,){2}*[^\]+*\]/
来缩短它。它还有一个额外的优点,就是可以捕获exp编号,比如10.02e-23。我最后去掉了结尾的“$”,因为我确实需要数组定义后面有文本的情况。最后我使用了:[\s*([^,]+)\s*,\s*([^,]+)\s*,\s*([^,]+)\s*]