gpt4 book ai didi

c# - 正则表达式允许数字、破折号、逗号

转载 作者:可可西里 更新时间:2023-11-01 03:00:43 26 4
gpt4 key购买 nike

我想知道 c# 的正则表达式满足以下模式:

  • 只允许数字、逗号和数字
  • 必须以数字开头和结尾
  • 数字范围是0到999
  • 数字(例如 1、2、3)或范围(例如 1-3、2-5)以“,”分隔
  • 两个','之间必须是数字或范围
  • '-'必须以数字开头和结尾
  • ',' 后只允许有 0-1 个空格

示例:

1-100,134,200 --> PASS. Maximum range of numbers 0-999
1,18,100 --> PASS
1, 18, 100 --> PASS. Allow 0-1 white space after ','
1, 18,100 --> FAIL. Due to more than 1 white space after ','
1-,18,100 --> FAIL. Due to no digit after '-'
-2,18,100 --> FAIL. Due to no digit before '-'
1,,18,100 --> FAIL. Due to no digit between ','
1, ,18,100 --> FAIL. Due to no digit between ','
,2,18,100 --> FAIL. Due to no digit before ','
1,18,100, --> FAIL. Due to no digit after ','

我尝试使用下面的代码,但它总是返回一个真实的结果:

string pattern = @"[0-9]+(?:-[0-9]+)?(,[0-9]+(?:-[0-9]+)?)*";
string test = @"1-5,13,238,-a";
bool result = Regex.IsMatch(test, pattern);

最佳答案

你可以使用这个正则表达式,

^(?:[1-9]\d\d|[1-9]?\d)(?:-(?:[1-9]\d\d|[1-9]?\d))?(?:,\s?(?:[1-9]\d\d|[1-9]?\d)(?:-(?:[1-9]\d\d|[1-9]?\d))?)*$

解释:

  • ^ - 字符串的开始
  • (?:[1-9]\d\d|[1-9]?\d) - 代表一个数字0999 并且不允许带有前导零的数字,例如 005
  • (?:-(?:[1-9]\d\d|[1-9]?\d))? - 还可以选择允许用连字符分隔的数字 - 因此与第一个正则表达式数字一起,它支持 2222-33 等数字
  • (?:,\s?(?:[1-9]\d\d|[1-9]?\d)(?:-(?:[1-9]\d\d|[1-9]?\d))?)* - 这部分只支持逗号分隔,可选地后跟一个空格,整个空格零次或多次
  • $ - 字符串结尾

我本可以使用 \d{1,3} 来表示从 0999 的数字,但这将允许像 004 似乎不允许查看您的示例数据。但是,如果确实可以允许 00404 这样的数字,那么您可以替换 [1-9]\d\d|[1-9]?\d 在我的正则表达式中使用 \d{1,3} 以使其变得简单。

Regex Demo

关于c# - 正则表达式允许数字、破折号、逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56181392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com