VB.net正则表达式到C#
如何从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
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()投影即可。