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假日期。@MaxTryParse()
返回bool,所以你知道如果失败了。还有,你的正则表达式不会因为是英语而依赖于文化吗?你也可以。@Max日期前后的文本总是一样的吗?如果不是相同的文本,则顺序是否仍然相同(例如,日期始终是第2、第3和第4个索引)