Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从文本中获得正确的日期?_C#_Regex - Fatal编程技术网

C# 如何从文本中获得正确的日期?

C# 如何从文本中获得正确的日期?,c#,regex,C#,Regex,我必须从文本文件中查找所有日期。文本应该是int形式的dd mm或mm dd(即1月10日或1月2日10日)。我已经编写了这种类型的正则表达式(\d{2}January)。它只给出了1月10日,但我想写 一,。一个正则表达式,这样我就可以得到两种日期格式(我有一个选项,我可以像这样写(\d{2}January)|(January\d{2})) 二,。有效的日期编号(即,如果文本中有99个一月,则我的正则表达式返回true,但它无效)。 应该匹配的案例 1月份y 02年1月 1月29日 1月32

我必须从文本文件中查找所有日期。文本应该是int形式的dd mmmm dd(即1月10日或1月2日10日)。我已经编写了这种类型的正则表达式
(\d{2}January)
。它只给出了1月10日,但我想写
一,。一个正则表达式,这样我就可以得到两种日期格式(我有一个选项,我可以像这样写
(\d{2}January)|(January\d{2})

二,。有效的日期编号(即,如果文本中有99个一月,则我的正则表达式返回true,但它无效)。 应该匹配的案例

  • 1月份y
  • 02年1月
  • 1月29日
  • 1月32日
  • 2004年1月
  • 2004年1月
  • 一月三十二日
  • 1月29日
  • 1月1日
  • 01年1月
这些以粗体显示,应该是有效的匹配,而其他的则是无效的。

这似乎有效:

string pattern = "(([0-2][0-9]|3[0-1]) January)|(January ([0-2][0-9]|3[0-1]))";
当然,它只在一月份有效。

这似乎有效:

string pattern = "(([0-2][0-9]|3[0-1]) January)|(January ([0-2][0-9]|3[0-1]))";
当然,它只在一月份有效。

这似乎有效:

string pattern = "(([0-2][0-9]|3[0-1]) January)|(January ([0-2][0-9]|3[0-1]))";
当然,它只在一月份有效。

这似乎有效:

string pattern = "(([0-2][0-9]|3[0-1]) January)|(January ([0-2][0-9]|3[0-1]))";

当然,它只适用于1月份。

此模式只需要一次月份名称:

\b((?<day>[0-2]?\d|3[01]) )?January(?(day)| ([0-2]?\d|3[01]))\b
\b((?[0-2]?\d|3[01])?一月(?(日)([0-2]?\d|3[01])\b

但它在0到31天之间匹配。一天的模式是:

  • 0-31:[0-2]?\d|3[01]
  • 0-30:[0-2]?\d|30
  • 0-29:[0-2]?\d
  • 0-28:[01]?\d|2[0-8]

此模式只需要一次月份名称:

\b((?<day>[0-2]?\d|3[01]) )?January(?(day)| ([0-2]?\d|3[01]))\b
\b((?[0-2]?\d|3[01])?一月(?(日)([0-2]?\d|3[01])\b

但它在0到31天之间匹配。一天的模式是:

  • 0-31:[0-2]?\d|3[01]
  • 0-30:[0-2]?\d|30
  • 0-29:[0-2]?\d
  • 0-28:[01]?\d|2[0-8]

此模式只需要一次月份名称:

\b((?<day>[0-2]?\d|3[01]) )?January(?(day)| ([0-2]?\d|3[01]))\b
\b((?[0-2]?\d|3[01])?一月(?(日)([0-2]?\d|3[01])\b

但它在0到31天之间匹配。一天的模式是:

  • 0-31:[0-2]?\d|3[01]
  • 0-30:[0-2]?\d|30
  • 0-29:[0-2]?\d
  • 0-28:[01]?\d|2[0-8]

此模式只需要一次月份名称:

\b((?<day>[0-2]?\d|3[01]) )?January(?(day)| ([0-2]?\d|3[01]))\b
\b((?[0-2]?\d|3[01])?一月(?(日)([0-2]?\d|3[01])\b

但它在0到31天之间匹配。一天的模式是:

  • 0-31:[0-2]?\d|3[01]
  • 0-30:[0-2]?\d|30
  • 0-29:[0-2]?\d
  • 0-28:[01]?\d|2[0-8]


使用类似的方法,并通过一系列数字(而不是任何数字)进行搜索。您可以添加文本的示例吗?您是否使用
|
测试正则表达式?如果没有年份,你打算如何确定2月29日是否有效?我建议您使用正则表达式查找可能的候选对象,然后使用
new DateTime(y,m,d)
过滤它们并捕获异常。试试这个:([12]\d|3[01])一月([12]\d|3[01]))实际上,类似的问题很多。请检查包含
提取日期C#
验证日期时间C#
的帖子,您将找到您案例的所有构建块。您不需要使用正则表达式来验证日期,可以使用
DateTime.TryParse
,因此正则表达式可以是基本的。可以使用类似于并通过一系列数字(而不仅仅是任何数字)进行搜索。您可以添加文本示例吗?您是否使用
测试正则表达式?如果没有年份,你打算如何确定2月29日是否有效?我建议您使用正则表达式查找可能的候选对象,然后使用
new DateTime(y,m,d)
过滤它们并捕获异常。试试这个:([12]\d|3[01])一月([12]\d|3[01]))实际上,类似的问题很多。请检查包含
提取日期C#
验证日期时间C#
的帖子,您将找到您案例的所有构建块。您不需要使用正则表达式来验证日期,可以使用
DateTime.TryParse
,因此正则表达式可以是基本的。可以使用类似于并通过一系列数字(而不仅仅是任何数字)进行搜索。您可以添加文本示例吗?您是否使用
测试正则表达式?如果没有年份,你打算如何确定2月29日是否有效?我建议您使用正则表达式查找可能的候选对象,然后使用
new DateTime(y,m,d)
过滤它们并捕获异常。试试这个:([12]\d|3[01])一月([12]\d|3[01]))实际上,类似的问题很多。请检查包含
提取日期C#
验证日期时间C#
的帖子,您将找到您案例的所有构建块。您不需要使用正则表达式来验证日期,可以使用
DateTime.TryParse
,因此正则表达式可以是基本的。可以使用类似于并通过一系列数字(而不仅仅是任何数字)进行搜索。您可以添加文本示例吗?您是否使用
测试正则表达式?如果没有年份,你打算如何确定2月29日是否有效?我建议您使用正则表达式查找可能的候选对象,然后使用
new DateTime(y,m,d)
过滤它们并捕获异常。试试这个:([12]\d|3[01])一月([12]\d|3[01]))实际上,类似的问题很多。请检查包含
提取日期C#
验证日期时间C#
的帖子,您将找到您案例的所有构建块。您不需要使用正则表达式来验证日期,请使用
DateTime.TryParse
,这样正则表达式就可以是基本的。条件匹配的用法很好。@vera谢谢,这个ans看起来不错,但当我将2004年1月的返回值设置为true时,因为04年1月符合条件。@madan是的,当然了-您的问题没有告诉我关于年的任何信息。您尝试了这个正则表达式
(\d{2}January)|(January\d{2