C#正则表达式不考虑换行

时间:2012-01-19 11:44:16

标签: c# regex

我有一个正则表达式:

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'检测器时,它怎么能挂起来?应该说字符串是错的,我无法弄清楚我哪里出错了。 请有人告诉我。

3 个答案:

答案 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