正则表达式匹配逗号分隔的字符串
我有以下字符串是合法的。
1-5,10-15
使用以下正则表达式,我得到一个错误的匹配。
^[^-\s]*-?[^-\s]*$
它适用于像
- 1-5,10
- 1,5
这些都是合法的。 但它不会处理逗号分隔范围。 我错过了什么?
尝试这种模式,
^\d+(\-\d+)?(\,(\d+(\-\d+)?))*$
它将匹配以下字符串:
1-5,10-15,5 1,2,3-5,3-4 1-5,10-15 10-15 10-15,5
但不是
1-,10-15,5 1,2,3-5,3- 1-510-15 10-15, ,10-15,5
- 截图
在哪里处理逗号? 尝试在regexper中可视化你的正则表达式
现在尝试这个:
^(\d+-?\d+)(?:\,(\d+-?\d+))+$
更新:我的正则表达式不是解决方案,因为您可能对捕获有非常特殊的需求。 但是,一旦您看到正则表达式的function,那个漂亮的工具可能会帮助您完成任务。
我知道用于拆分逗号分隔字符串的最佳正则表达式是:
",(?=(?:[^\""]*\""[^\""]*\"")*(?![^\""]*\""))"
它不会在包含逗号的引号中拆分条目。
你好,那里,“你,人”给出
你好
那里
你,人
^(\s*\d+\s*-?\s*\d*)(\,(\s*\d+\s*-?\s*\d*))*$
它负责起始空间,后跟至少1位数。 “ – ”是可选的,后面可以跟一个或多个数字。 “,”是可选的,可以跟随之前的同一组。
火柴:
1,5
1-5,5-10
15,2,10,4-10
这是一种仅使用拆分的方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace RangeTester { class Program { static void Main(string[] args) { string str = "1,2,3,1-5,10-15,100-200"; string[] ranges = str.Split(','); foreach (string range in ranges) { Console.WriteLine(GetRange(range.Trim())); } Console.Read(); } static string GetRange(string range) { string[] rng = range.Split('-'); if (rng.Length == 2) return rng[0] + " to " + rng[1]; else return rng[0]; } } }
我一直在想这个问题的解决方案,但是既然你知道你的数字/范围列表将首先用逗号分隔,然后用破折号分隔,你可以使用分割来解析各个部分。 无需使用正则表达式来解析此字符串。
试试这个正则表达式:
^\d+(-\d+)?(,\d+(-\d+)?)*$
您可能想要(\d+)-(\d+)
来获得每个范围。 这里的例子。
我认为这应该也可以。
^\d*(-\d*)?,\d*(-?\d*)?$
希望能帮助到你。