读书人

正则表达式替换内容(VB.NET),该如何处

发布时间: 2012-03-19 22:03:05 作者: rapoo

正则表达式替换内容(VB.NET)
因为考虑到性能问题,所以想把现有代码中类似

VB.NET code
If str1 = "" AndAlso str2 = "" Then    ...End IfIf str1 = "" OrElse str2 = "" Then    ...End If

的方式用如下方式替换
VB.NET code
If str1.Length = 0 AndAlso str2.Length = 0 Then    ...End IfIf str1.Length = 0 OrElse str2.Length = 0 Then    ...End If

因为需要替换的地方比较多,所以考虑使用正则表达式的反向引用方式替换,但是小弟不才,只能使用替换如下代码
VB.NET code
Dim rg8 As Regex = New Regex("^If\s(?<key>\w+)\s=\s""\sThen")Console.WriteLine(rg8.Replace("If str = "" Then", "If ${key}.Length = 0 Then"))'Output:If str.Length = 0 Then

如果If条件中有多个AndAlso、OrElse或者两者混合,再复杂点的还有括号如下:
VB.NET code
If str1 = "" AndAlso (str2 = "" OrElse str3 = "" ) OrElse str4 = "" Then    ...End If

所以,请教高手,遇到这些复杂条件的If语句,该如何使用正则表达式替换呢?

[解决办法]
你要考虑当str1为Nothing时
str1=""仍然有用
但str1.Length = 0就异常了
[解决办法]
C# code
void Main(){    string str=@"If str1 = """" AndAlso str2 = """" Then    ...End IfIf str1 = """" OrElse str2 = """" Then    ...End IfIf str1 = """" AndAlso (str2 = """" OrElse str3 = """" ) OrElse str4 = """" Then    ...End If";    str=Regex.Replace(str,@"(If|AndAlso|OrElse)\s+((\S+)\s*=\s*"""")","$1 $3.Length = 0");    Console.WriteLine(str);    /*    If str1.Length = 0 AndAlso str2.Length = 0 Then    ...End IfIf str1.Length = 0 OrElse str2.Length = 0 Then    ...End IfIf str1.Length = 0 AndAlso (str2.Length = 0 OrElse str3.Length = 0 ) OrElse str4.Length = 0 Then    ...End If    */}
[解决办法]
不用什么都想着一步全天,直接用DW批量分别替换,比起你写正则的时间要效率得多
If str1 = "" AndAlso str2 = "" Then

If str1 = "" OrElse str2 = "" Then

读书人网 >.NET Framework

热点推荐