webdevqa.jp.net

コンマ区切りリストの正規表現

このようなコンマ区切りリストを検証するための正規表現は何ですか:

12365, 45236, 458, 1, 99996332, ......
63

次の方法で行うことをお勧めします。

(\d+)(,\s*\d+)*

これは、1つ以上の要素を含むリストに対して機能します。

102
Asaph

この正規表現は、コンテンツに関係なく、コンマ区切りリストから要素を抽出します。

(.+?)(?:,|$)

コンマを別のものに置き換えるだけで、すべての区切り文字で機能するはずです。

11
K. P.

正確な要件に少し依存します。私は仮定しています:すべての数字、任意の長さ、数字は先行ゼロを持つことはできず、カンマまたは小数点を含むことはできません。個々の数字は常にコンマとスペースで区切られ、最後の数字にはコンマとスペースがありません。これらのいずれかが間違っていると、ソリューションが簡素化されます。

([1-9] [0-9] *、[])* [1-9] [0-9] *

精神的にそれを構築した方法は次のとおりです。

[0-9]  any digit.
[1-9][0-9]*  leading non-zero digit followed by any number of digits
[1-9][0-9]*, as above, followed by a comma
[1-9][0-9]*[ ]  as above, followed by a space
([1-9][0-9]*[ ])*  as above, repeated 0 or more times
([1-9][0-9]*[ ])*[1-9][0-9]*  as above, with a final number that doesn't have a comma.
9
mcherm

重複するコンマ区切りアイテムに一致する:

(?<=,|^)([^,]*)(,\1)+(?=,|$)

Reference .

この正規表現を使用して、コンマ配信リストの値を分割できます。リスト要素は、引用符付き、引用符なし、または空の場合があります。引用符のペア内のコンマは一致しません。

,(?!(?<=(?:^|,)\s*"(?:[^"]|""|\\")*,)(?:[^"]|""|\\")*"\s*(?:,|$))

Reference .

7
madcolor
/^\d+(?:, ?\d+)*$/
5
w35l3y

これは、行の先頭または末尾にある不要なコンマを拒否します(重要な場合)。

((, )?(^)?(possible|value|patterns))*

置換possible|value|patterns許可された値と一致する正規表現を使用します。

2
Will Hains

各アイテムの前にアンダースコアを付けずに英数字にする必要があるアイテムのリストにこれを使用しました。

^(([0-9a-zA-Z][0-9a-zA-Z_]*)([,][0-9a-zA-Z][0-9a-zA-Z_]*)*)$
2
PPPaul

JavaScriptでは、splitを使用して支援し、負の数字もキャッチします。

'-1,2,-3'.match(/(-?\d+)(,\s*-?\d+)*/)[0].split(',');
// ["-1", "2", "-3"]
// may need trimming if digits are space-separated
1
crazy4groovy

以下は、コンマ区切りのワード/数字/スペースの組み合わせに一致します

(((.)*,)*)(.)*
1
Aidan

次のように、エスケープされたコンマでエンコードされた辞書/ハッシュテーブルを解析するために、わずかに異なる要件がありました。

_"1=This is something, 2=This is something,,with an escaped comma, 3=This is something else"
_

これは、正規表現の複雑さを回避するトリックを備えたエレガントなソリューションだと思います。

_if (string.IsNullOrEmpty(encodedValues))
{
    return null;
}
else
{
    var retVal = new Dictionary<int, string>();
    var reFields = new Regex(@"([0-9]+)\=(([A-Za-z0-9\s]|(,,))+),");
    foreach (Match match in reFields.Matches(encodedValues + ","))
    {
        var id = match.Groups[1].Value;
        var value = match.Groups[2].Value;
        retVal[int.Parse(id)] = value.Replace(",,", ",");
    }
    return retVal;
}
_

@"([0-9]+),\s?"のような式を使用して元の質問に適合させ、_Groups[0]_で解析できると思います。

それが誰かに役立つことを願っています。特にAsaphに近づくためのヒントをありがとう!

1
alpsystems.com

安全のために言語を指定することもできますが、

(\d+, ?)+(\d+)?

働くべき

1
David Berger