【发布时间】:2021-10-26 01:49:12
【问题描述】:
在 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?我知道我可以创建多个匹配变量并提前执行匹配,但这仍然感觉很浪费,因为它提前执行所有匹配,而不是仅在需要时执行。
【问题讨论】:
-
也许可以重做逻辑。进行匹配以获取 m,然后根据 m 的值执行条件