Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Regular Language - Fatal编程技术网

C#正则表达式,用于解析有时在数字旁边包含额外空格的字符串

C#正则表达式,用于解析有时在数字旁边包含额外空格的字符串,c#,regex,regular-language,C#,Regex,Regular Language,我正试图改变注册号。下面的表达式考虑了月份和日期之间的额外空间,如下所示: (?:(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s\d{1,2}\s\d{1,2}:\d{1,2} rats 1.4K Sep 9 08:10 /opt/rats/prod ===> it returns blank rats 1.4K Sep 12 08:10 /opt/rats/prod ===> returns "Sep 12 08:10"

我正试图改变注册号。下面的表达式考虑了月份和日期之间的额外空间,如下所示:

(?:(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s\d{1,2}\s\d{1,2}:\d{1,2}

rats 1.4K Sep  9 08:10 /opt/rats/prod ===> it returns blank
rats 1.4K Sep 12 08:10 /opt/rats/prod ===> returns "Sep 12 08:10"

If I add \s it works in the first string but it breaks on the second string:

(?:(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s\s\d{1,2}\s\d{1,2}:\d{1,2}

谢谢你

你可以试试这个:
\s{1}\d{2}
或者
\s{2}\d{1}

(?:(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))(\s{1}\d{2}|\s{2}\d{1})\s\d{1,2}:\d{1,2}

完全匹配额外的空间

(?:(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s{1,2}\d{1,2}\s\d{1,2}:\d{1,2}
匹配任何额外空格的计数

(?:(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s+\d{1,2}\s\d{1,2}:\d{1,2}

\s{1,2}
匹配1或2个空格,与匹配1或2个数字的方式相同。为什么不使用
DateTime.TryParse()进行解析呢?很明显,在日期之前有一些文本,但它看起来是一个常量,所以只需在日期之前删除它即可parsing@maccettura:解析取决于用户的区域性,因此TryParse无法向我提供,而且如果解析失败,我不会得到异常,它将返回1/1假日期。@Max
TryParse()
返回bool,所以你知道如果失败了。还有,你的正则表达式不会因为是英语而依赖于文化吗?你也可以。@Max日期前后的文本总是一样的吗?如果不是相同的文本,则顺序是否仍然相同(例如,日期始终是第2、第3和第4个索引)