繁体   English   中英

使用vb.net在字符串中查找正则表达式不匹配的部分

[英]Find Regex mismatch part in a string using vb.net

我有一个正则表达式

^\d{9}_[a-zA-Z]{1}_(0[1-9]|1[0-2]).(0[1-9]|[1-2][0-9]|3[0-1]).[0-9]{4}_\d*_[0-9a-zA-Z]*_[0-9a-zA-Z]*

和与正则表达式匹配的字符串

000066874_A_12.31.2014_001_2Q_ICAN14 

如果用户错误输入了上述格式以外的其他字符串,例如

000066874_12.31.14_001_2Q_ICAN14  

我需要找出正则表达式的哪一部分失败。 我尝试使用Regex.Matches和Regex.Match,但是使用此方法我找不到我的字符串与Regex表达式匹配的部分。 我正在使用vb.net

使用正则表达式非常复杂。 我设法制作了此正则表达式,但此后您仍然必须检查捕获组。

^(?:(?:(\\d{9})|.*?)_)?(?:(?:([a-zA-Z]{1})|.*?)_)?(?:(?:((?:0[1-9]|1[0-2]).(?:0[1-9]|[1-2][0-9]|3[0-1]).[0-9]{4})|.*?)_)?(?:(?:(\\d*)|.*?)_)?(?:(?:([0-9a-zA-Z]*)|.*?)_)?(?:([0-9a-zA-Z]*)|.*?)$如果您可以使用,如演示中所示: https:// regex101的.com / R / aJ1wG1 / 2

下划线之前的每个部分都是一个捕获组,如果捕获组不存在,则说明其中存在错误。 正如您在示例中看到的那样,在第一个示例中不存在$ 3,因此存在日期错误。 在第二个示例中,不存在$ 2,因此不存在$ 2及以后的金额。 第三个例子是正确的,所有6个caputre组都在那里。

当正则表达式变得如此庞大时,这表明可能应该使用其他方法来解决问题,但这可能对您有用,但需要一些额外的代码来进行组结果检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM