使用RegEx匹配C#中的月份

pscapng

首先,我要说我是Regex和C#的新手,所以我仍在设法弄清楚这一点。我也意识到正则表达式是一门很深的主题,需要花费一些时间来理解。我做了一些研究来弄清楚这一点,但是我没有时间去适当地研究Regex语法的技巧,因为我需要明天完成此程序。(不,这不是作业,是为了我的工作)

我正在使用c#逐行搜索文本文件,并且试图使用Regex表达式来检查是否有任何行以MM-DD格式包含当前月份的任何日期。Regex表达式在传递文件的每一行的方法中使用。

这是我目前使用的方法:

private bool CheckTransactionDates(string line)
{ 
   // in the actual code this is dynamically set based on other variables
   string month = "12";

   Regex regExPattern = new Regex(@"\s" + month + @"-\d(0[1-9]|[1-2][0-9]|3[0-1])\s");
   Match match = regExPattern.Match(line);

   return match.Success;
}

本质上,如果它前面有一个空格,然后是一个空格,则我需要它进行匹配。仅当是当前月份(在这种情况下为12),连字符和月份中的某天(“ 12-01”应匹配,但“ 12-99”不匹配)时。连字符的两边应始终为两位数。

这个正则表达式(我唯一可以匹配的东西)可以工作,但也可以拾取必要范围之外的项目:

Regex regExPattern = new Regex(@"\s" + month + @"-\d{2}\s");

我也尝试了这个没有成功:

Regex regExPattern = new Regex(@"\s" + month + @"-\d[01-30]{2}\s");

谁能告诉我我需要更改以获得所需的结果吗?提前致谢。

原野旺子

如果您只需要查找行中是否包含任何有效匹配项,则可以执行以下操作:

private bool CheckTransactionDates(string line)
{ 
   // in the actual code this is dynamically set based on other variables
   int month = DateTime.Now.Month;
   int daysInMonth = DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month);

   Regex pattern = new Regex(string.Format(@"{0:00}-(?<DAY>[0123][0-9])", month));
   int day = 0;

   foreach (Match match in pattern.Matches(line))
   {
      if (int.TryParse(match.Groups["DAY"].Value, out day))
      {
         if (day <= daysInMonth)
         {
            return true;
         }
      }
   }

   return false;
}

运作方式如下:

您确定要搜索的月份(此处使用当前月份),以及该月份的天数。

接下来,使用string.Format函数构建正则表达式模式,该函数将左填充零的月份放在其后,然后是破折号,后跟任意两位数字00到39[0123]第一个数字[0-9]为the,第二个数字为)。这会缩小正则表达式的匹配范围,但不能最终确定日期。(?<DAY>...)它周围创建一个正则表达式组,这将使得处理它以后更容易。请注意,如果行以有效日期开头,则我不会检查空格。您可以轻松地在模式中添加空格,或根据您的特定需求修改模式。

接下来,我们pattern.Matches循环检查该行(上所有可能的匹配项

如果找到匹配项,则我们尝试将其解析为整数(根据我们匹配的模式,它应始终有效)。我们使用DAY在模式中定义的匹配组。

将匹配项解析为整数后day,我们检查该天是否是指定月份的有效数字。如果是,我们从函数中返回true,因为我们找到了有效日期。

最后,如果没有找到匹配项,或者没有匹配项有效,则从函数中返回false(仅当我们之前未返回true时)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用RegEx匹配C#中的月份

来自分类Dev

尝试使用C#中的命名组获取多个RegEx匹配

来自分类Dev

在C#中使用Regex获取单词的完全匹配

来自分类Dev

在 C# 中使用 Regex 匹配 10 或 12 位数字

来自分类Dev

DateTime 减少 C# 中的月份数

来自分类Dev

REGEX在测试器中匹配,但在C#中不匹配

来自分类Dev

使用Regex在C#中解析#ifdef

来自分类Dev

匹配 C# 中的答案

来自分类Dev

使用组合框 C# 获取月份的数值

来自分类Dev

RegEx匹配在C#中包含CRLF的字符串

来自分类Dev

C# RegEx:如何仅在文本行的中间词中匹配字符串?

来自分类Dev

如何使用 RegEx (C#) 在特定字符串之后匹配字符串

来自分类Dev

为什么此Regex在C#控制台中不匹配,但在http://gskinner.com/RegExr/中却匹配

来自分类Dev

使用Regex在C#中拆分字符串

来自分类Dev

使用Regex在C#中拆分字符串

来自分类Dev

使用Regex C#从HTML标签中删除样式

来自分类Dev

在表格使用Regex C#中查找href

来自分类Dev

使用RegEx匹配URL中的ID

来自分类Dev

使用Regex匹配Powershell中的路径

来自分类Dev

使用月份和年份输入在C中打印儒略历?

来自分类Dev

C#匹配不同列表中的项目

来自分类Dev

C# 7.0 中的模式匹配

来自分类Dev

在C#中,使用正则表达式匹配目录中的所有文件

来自分类Dev

为什么C#的Regex.Matches()返回单个Match对象中的所有匹配项?

来自分类Dev

在C中验证正确的月份

来自分类Dev

使用C#中的正则表达式返回包含匹配项的整行

来自分类Dev

使用LINQ为了通过C#中的匹配子列表值选择列表

来自分类Dev

C# 7 中的模式匹配是否应该与泛型一起使用?

来自分类Dev

匹配签名的代码中的方法列表(使用 Roslyn 或扩展的 C# VS)

Related 相关文章

  1. 1

    使用RegEx匹配C#中的月份

  2. 2

    尝试使用C#中的命名组获取多个RegEx匹配

  3. 3

    在C#中使用Regex获取单词的完全匹配

  4. 4

    在 C# 中使用 Regex 匹配 10 或 12 位数字

  5. 5

    DateTime 减少 C# 中的月份数

  6. 6

    REGEX在测试器中匹配,但在C#中不匹配

  7. 7

    使用Regex在C#中解析#ifdef

  8. 8

    匹配 C# 中的答案

  9. 9

    使用组合框 C# 获取月份的数值

  10. 10

    RegEx匹配在C#中包含CRLF的字符串

  11. 11

    C# RegEx:如何仅在文本行的中间词中匹配字符串?

  12. 12

    如何使用 RegEx (C#) 在特定字符串之后匹配字符串

  13. 13

    为什么此Regex在C#控制台中不匹配,但在http://gskinner.com/RegExr/中却匹配

  14. 14

    使用Regex在C#中拆分字符串

  15. 15

    使用Regex在C#中拆分字符串

  16. 16

    使用Regex C#从HTML标签中删除样式

  17. 17

    在表格使用Regex C#中查找href

  18. 18

    使用RegEx匹配URL中的ID

  19. 19

    使用Regex匹配Powershell中的路径

  20. 20

    使用月份和年份输入在C中打印儒略历?

  21. 21

    C#匹配不同列表中的项目

  22. 22

    C# 7.0 中的模式匹配

  23. 23

    在C#中,使用正则表达式匹配目录中的所有文件

  24. 24

    为什么C#的Regex.Matches()返回单个Match对象中的所有匹配项?

  25. 25

    在C中验证正确的月份

  26. 26

    使用C#中的正则表达式返回包含匹配项的整行

  27. 27

    使用LINQ为了通过C#中的匹配子列表值选择列表

  28. 28

    C# 7 中的模式匹配是否应该与泛型一起使用?

  29. 29

    匹配签名的代码中的方法列表(使用 Roslyn 或扩展的 C# VS)

热门标签

归档