VB.net正则表达到C#

xZe*_*rox 1 c# regex vb.net pattern-matching

我如何从VB.net将其转换为C#.我尝试了在线转换器但是当我把它放在我的项目中时我遇到了错误.

Dim regexinfo As String = String.Empty
Dim p = "\[news\](?<info>.*?)\[/news\]"
Dim Matches = Regex.Matches(response, p, RegexOptions.IgnoreCase Or RegexOptions.Singleline)
If Matches IsNot Nothing AndAlso Matches.Count > 0 Then
    For Each Match As Match In Matches
        If Match.Groups("info").Success Then
            regexinfo = (Match.Groups("info").Value)
        End If
    Next
End If
Run Code Online (Sandbox Code Playgroud)

Joe*_*orn 6

我猜它是"匹配"变量,它的名称与导致问题的类型相同.这应该做你想要的:

var p = @"\[news\](?<info>.*?)\[/news\]";
var Matches = Regex.Matches(response, p, RegexOptions.IgnoreCase | RegexOptions.Singleline);
string regexinfo = Matches.LastOrDefault(m=>m.Groups("info").Success) ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)

这段代码在功能上等同于你原来的VB.Net,即使它只有3行而不是10行(而且很容易只有1行).

例如,不需要原始代码中的"if"条件,因为Matches()函数将返回一个空集合而不是null,并且?? string.Empty()片段负责处理未找到的情况.因此,即使代码发生了变化,行为也没有.但这不是ac#vs VB的事情; VB.Net也可以在一行中完成.您可能希望通过使用FirstOrDefault()而不是使用而进一步改进LastOrDefault().只是后者与你原创匹配而前者不匹配.