Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.net正则表达式到C#_C#_Vb.net_Regex_Pattern Matching - Fatal编程技术网

VB.net正则表达式到C#

VB.net正则表达式到C#,c#,vb.net,regex,pattern-matching,C#,Vb.net,Regex,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

如何从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
Dim regexinfo As String=String.Empty
Dim p=“\[news\]”(?.*?\[/news\]”
Dim Matches=Regex.Matches(response,p,RegexOptions.IgnoreCase或RegexOptions.Singleline)
如果匹配项不是空的,也有匹配项。计数>0,则
将每个比赛作为比赛中的比赛
如果匹配。组(“信息”)。成功,则
regexinfo=(Match.Groups(“info”).Value)
如果结束
下一个
如果结束
我猜是名为与其类型相同的“Match”变量引起了问题。这应该满足您的要求:

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;
var p=@“\[news\](?*?)\[/news\]”;
var Matches=Regex.Matches(response,p,RegexOptions.IgnoreCase | RegexOptions.Singleline);
字符串regexinfo=Matches.LastOrDefault(m=>m.Groups(“info”).Success)??字符串。空;
这段代码在功能上等同于您原来的VB.Net,尽管它只有3行而不是10行(而且很容易只有1行)

例如,不需要原始代码中的“if”条件,因为Matches()函数将返回空集合,而不是null和
??string.Empty()
snippet处理未找到的大小写。因此,即使代码改变了,行为也没有改变。不过,这不是c#vs VB的事情;Net也可以在一行中完成。您可能希望通过使用
FirstOrDefault()
而不是
LastOrDefault()
来进一步改进。只是后者与您原来的匹配,而前者不匹配。

我猜是名为与其类型相同的“Match”变量导致了问题。这应该满足您的要求:

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;
var p=@“\[news\](?*?)\[/news\]”;
var Matches=Regex.Matches(response,p,RegexOptions.IgnoreCase | RegexOptions.Singleline);
字符串regexinfo=Matches.LastOrDefault(m=>m.Groups(“info”).Success)??字符串。空;
这段代码在功能上等同于您原来的VB.Net,尽管它只有3行而不是10行(而且很容易只有1行)


例如,不需要原始代码中的“if”条件,因为Matches()函数将返回空集合,而不是null和
??string.Empty()
snippet处理未找到的大小写。因此,即使代码改变了,行为也没有改变。不过,这不是c#vs VB的事情;Net也可以在一行中完成。您可能希望通过使用
FirstOrDefault()
而不是
LastOrDefault()
来进一步改进。只是后者与您的原创相符,而前者与您的原创相符。

您能更具体地说明您所犯的错误吗?您能更具体地说明您所犯的错误吗?我需要它为每一条[新闻]/news]进行匹配,这样我基本上可以得到介于两者之间的一切。[poster][/poster][date][/date][content][/content][/content]@xzerox此代码与您的原始代码相同。如果你需要改变这一点,这是一个新问题。不过,这很容易做到——只需将其更改为返回IEnumerable并使用.Select()投影即可。我需要它为每个[news][/news]执行此操作,这样我基本上可以得到介于两者之间的所有内容。[poster][/poster][date][/date][content][/content][/content]@xzerox此代码与您的原始代码相同。如果你需要改变这一点,这是一个新问题。不过,这很容易做到——只需将其更改为返回IEnumerable并使用.Select()投影即可。