このようなコンマ区切りリストを検証するための正規表現は何ですか:
12365, 45236, 458, 1, 99996332, ......
次の方法で行うことをお勧めします。
(\d+)(,\s*\d+)*
これは、1つ以上の要素を含むリストに対して機能します。
この正規表現は、コンテンツに関係なく、コンマ区切りリストから要素を抽出します。
(.+?)(?:,|$)
コンマを別のものに置き換えるだけで、すべての区切り文字で機能するはずです。
正確な要件に少し依存します。私は仮定しています:すべての数字、任意の長さ、数字は先行ゼロを持つことはできず、カンマまたは小数点を含むことはできません。個々の数字は常にコンマとスペースで区切られ、最後の数字にはコンマとスペースがありません。これらのいずれかが間違っていると、ソリューションが簡素化されます。
([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.
/^\d+(?:, ?\d+)*$/
これは、行の先頭または末尾にある不要なコンマを拒否します(重要な場合)。
((, )?(^)?(possible|value|patterns))*
置換possible|value|patterns
許可された値と一致する正規表現を使用します。
各アイテムの前にアンダースコアを付けずに英数字にする必要があるアイテムのリストにこれを使用しました。
^(([0-9a-zA-Z][0-9a-zA-Z_]*)([,][0-9a-zA-Z][0-9a-zA-Z_]*)*)$
JavaScriptでは、split
を使用して支援し、負の数字もキャッチします。
'-1,2,-3'.match(/(-?\d+)(,\s*-?\d+)*/)[0].split(',');
// ["-1", "2", "-3"]
// may need trimming if digits are space-separated
以下は、コンマ区切りのワード/数字/スペースの組み合わせに一致します
(((.)*,)*)(.)*
次のように、エスケープされたコンマでエンコードされた辞書/ハッシュテーブルを解析するために、わずかに異なる要件がありました。
_"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に近づくためのヒントをありがとう!
安全のために言語を指定することもできますが、
(\d+, ?)+(\d+)?
働くべき