因为考虑到性能问题,所以想把现有代码中类似
- 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