将条件Perl Regex匹配转换为VB.NET



在Perl中,您可以在条件语句中使用正则表达式匹配,例如

if ($myvar =~ /(pattern1)(pattern2)/) {
$var1 = $1;
$var2 = $2;
} elseif ($myvar =~ /(pattern3)(pattern4)/) {
...
} elseif ($myvar =~ /(pattern5)(pattern6)/) {
...
}

VB。NET中,我通常将其转换为:

Dim re1 As New Regex("(pattern1)(pattern2)")
Dim re2 As New Regex("(pattern3)(pattern4)")
Dim re3 As New Regex("(pattern3)(pattern4)")
Dim m as match
if re1.IsMatch(myvar) Then
m = re1.Match(myvar)
var1 = m.Groups(1).Value
var2 = m.Groups(2).Value
Else If re2.IsMatch(myvar) Then
m = re2.Match(myvar)
...
Else If re3.IsMatch(myvar) Then
m = re3.Match(myvar)
...
End

是否有可能简化.NET等效程序,使其不寻找匹配成功,然后再次执行匹配,更类似于内联Perl?我知道我可以创建多个匹配变量并提前执行匹配,但这仍然感觉很浪费,因为它是提前执行所有匹配,而不是只在需要时执行匹配。

运行Regex.Match后正在寻找Match.Success属性。如果为"true",则可以访问组值:

Dim re1 As New Regex("(pattern1)(pattern2)")
Dim re2 As New Regex("(pattern3)(pattern4)")
Dim m as Match
m = re1.Match(myvar)
If (m.Success = True) Then
var1 = m.Groups(1).Value
var2 = m.Groups(2).Value
Else
m = re2.Match(myvar)
If (m.Success = True) Then
var1 = m.Groups(1).Value
var2 = m.Groups(2).Value
End
End

最新更新