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

不考虑换行的C#正则表达式,c#,regex,C#,Regex,我有一个正则表达式,如下所示: Regex regExpForPurchaseIndent = new System.Text.RegularExpressions.Regex("^(([0-9]*[a-zA-Z]*)*[, ]*)*$";); 字符串“PRFA1223,JIBD122,\nPIHFU1343”使应用程序挂起在if语句中 if (!regExpForPurchaseIndent.IsMatch(newAsset.PurchaseIndent)) { //Print

我有一个正则表达式,如下所示:

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'检测器时,它怎么能挂起?它应该说字符串是错的,我不知道我错在哪里。 请有人告诉我。

您是否使用:

string s = "PRFA1223,JIBD122,\nPIHFU1343";
OR
string s = @"PRFA1223,JIBD122,\nPIHFU1343";
请两者都试试

关于代码挂起,我以前从未见过c#挂起,请给出更多代码

也尝试

if (Regex.IsMatch(newAsset.PurchaseIndent, @"^(([0-9]*[a-zA-Z]*)*[, ]*)*$"))
顺便说一句,
([0-9]*[a-zA-Z]*)*
没有意义

您是否使用:

string s = "PRFA1223,JIBD122,\nPIHFU1343";
OR
string s = @"PRFA1223,JIBD122,\nPIHFU1343";
请两者都试试

关于代码挂起,我以前从未见过c#挂起,请给出更多代码

也尝试

if (Regex.IsMatch(newAsset.PurchaseIndent, @"^(([0-9]*[a-zA-Z]*)*[, ]*)*$"))

顺便说一句,
([0-9]*[a-zA-Z]*)*
没有意义

它不会挂起,因为你的量词非常嵌套,它需要很长时间。正则表达式还没有完成

您应该重构正则表达式,例如:

Regex regExpForPurchaseIndent = new System.Text.RegularExpressions.Regex("^[0-9]*[a-zA-Z]*(?:[, ]*[0-9]*[a-zA-Z]*)*$");

它不会挂起,它确实需要很长时间,因为你的量词非常嵌套。正则表达式还没有完成

您应该重构正则表达式,例如:

Regex regExpForPurchaseIndent = new System.Text.RegularExpressions.Regex("^[0-9]*[a-zA-Z]*(?:[, ]*[0-9]*[a-zA-Z]*)*$");

我认为问题在于你的正则表达式模式。您尝试匹配的元素是否总是以字母后跟数字,并以逗号和可选空格分隔?如果是这样,这可能会给你你想要的(尽管它可能比这更精致)<代码>^([a-zA-Z]*[0-9]*[,]*])*$


您可以使用正则表达式测试仪来帮助您,我喜欢这一个,我认为问题在于您的正则表达式模式。您尝试匹配的元素是否总是以字母后跟数字,并以逗号和可选空格分隔?如果是这样,这可能会给你你想要的(尽管它可能比这更精致)<代码>^([a-zA-Z]*[0-9]*[,]*])*$

你可以使用正则表达式测试仪来帮助你,我喜欢这个