正则表达式与数字之间的符号

时间:2017-06-20 15:35:52

标签: c# regex

场合

我正在尝试以该格式构建一个字符串2010/2011,基本上是一年。

我做了什么

我有表达式^((?=.{4,4}$)[0-9]+$),它接受​​4个数字 我可以将其更改为^((?=.{8,8}$)[0-9]+$),它将接受8个数字。但是,我仍然没有解决在两年之间获得/的问题。 我尝试^((?=.{4,4}$)[0-9]+$).我希望能够输入2010z(四个数字加上任何数字)但是它仍然会抛出错误。

所以我的问题,我能否明确说出像{4 digits}{ONLY /}{4 digits这样的表达方式。如果是这样,我如何合并^((?=.{4,4}$)[0-9]+$)并且只允许' /'它们之间。

3 个答案:

答案 0 :(得分:1)

如果我正确地读到这个,你会想要这样的东西:

^(\d{4})\?(\d{4})?$

含义4位数后跟可选的斜杠4位数。

答案 1 :(得分:1)

这是一个采用任何分隔符或没有分隔符的单词,并确保每年有四个数字或不存在匹配。

所以2010-20172010/20172010 201720102017一样有效,但201092017无效。

^\d{4}[^\d]?\d{4}$

如果您需要捕获各个年份,请使用( )制作群组,以便现在的模式如下所示

^(\d{4})[^\d]?(\d{4})$

并在myMatch.Groups[1].ValuemyMatch.Groups[2].Value处提取。

2010/2017上的结果与这些Groups[X]

匹配
Match #0
          [0]:  2010/2017
  ["1"] → [1]:  2010
  ["2"] → [2]:  2017

答案 2 :(得分:0)

你的正则表达式:(?=.{4,4}$)实际上意味着:

  • 正向查找,
  • 代表4个任意字符(不是数字),
  • 然后是字符串的结尾。

所以无论如何,它都不会匹配像2010/2011这样的字符串。

尝试“更自然”的正则表达式:

^(\d{4})\/(\d{4})$

这意味着:

  • 字符串的开头,
  • 四位数(第一个捕获组),
  • 斜线(引用),
  • 另外四位数(第二个捕获组),
  • 字符串结尾。

我使用捕获组,因为我认为你可能对两者感兴趣 数字(斜杠之前和之后),因此更容易阅读它们 来自捕获小组。