RegEx:返回包含不超过两个特定字符的字符串

时间:2015-01-29 19:00:06

标签: 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  , -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*\]

4 个答案:

答案 0 :(得分:0)

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

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

<强> Working demo

enter image description here

它类似于你的正则表达式,但使用{2}表示法可以缩短它。

答案 1 :(得分:0)

由于您正在寻找三个元素,因此可以使用/\[[^,]+, *[^,]+, *[^\]]+ *\]/

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

Regular expression visualization

Debuggex Demo

答案 2 :(得分:0)

以下是 I 尝试执行的操作:

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

https://regex101.com/r/zG5eZ5/1

但出于某种原因,我只得到最后两个数字(查看&#34;匹配信息&#34;,在右侧),而不是全部。

答案 3 :(得分:0)

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

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

Demo