我有一个正则表达式:
Regex regExpForPurchaseIndent = new System.Text.RegularExpressions.Regex("^(([0-9]*[a-zA-Z]*)*[, ]*)*$";);
字符串"PRFA1223,JIBD122,\nPIHFU1343"
使应用程序挂起if
语句
if (!regExpForPurchaseIndent.IsMatch(newAsset.PurchaseIndent))
{
//Print the string is not correct
}
现在我知道RegEx
将'\ n'视为特例。但是当我的表情没有'\ n'检测器时,它怎么能挂起来?应该说字符串是错的,我无法弄清楚我哪里出错了。
请有人告诉我。
答案 0 :(得分:1)
你使用:
string s = "PRFA1223,JIBD122,\nPIHFU1343";
OR
string s = @"PRFA1223,JIBD122,\nPIHFU1343";
请尝试两者。
关于代码挂起,我以前从未见过c#hang,请提供更多代码
也试试
if (Regex.IsMatch(newAsset.PurchaseIndent, @"^(([0-9]*[a-zA-Z]*)*[, ]*)*$"))
顺便说一下,([0-9]*[a-zA-Z]*)*
没有意义
答案 1 :(得分:1)
它没有挂起,由于你的嵌套量词,它确实需要很长时间。正则表达式还没有完成。
你应该重构你的正则表达式,试试,例如这样:
Regex regExpForPurchaseIndent = new System.Text.RegularExpressions.Regex("^[0-9]*[a-zA-Z]*(?:[, ]*[0-9]*[a-zA-Z]*)*$");
答案 2 :(得分:1)
我认为问题在于你的正则表达式。您尝试匹配的元素是否总是有字母后跟数字,并用逗号和可选的空格分隔?如果是这样,这可能会给你你想要的东西(虽然它可能比这更精致); ^([a-zA-Z]*[0-9]*[, ]*)*$
?
您可以使用正则表达式测试人员来帮助您,我喜欢这个http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx