【问题标题】:VB.net Regex to C#VB.net 正则表达式到 C#
【发布时间】:2010-07-26 02:00:05
【问题描述】:

如何将其从 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

【问题讨论】:

  • 您能更具体地说明您遇到的错误吗?

标签: c# vb.net regex pattern-matching


【解决方案1】:

我猜是“匹配”变量的名称与它的类型相同导致问题。这应该做你想做的事:

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;

此代码在功能上与您原来的 VB.Net 相同,尽管它只有 3 行而不是 10 行(很容易只有 1 行)。

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

【讨论】:

  • 我需要它为每个 [news][/news] 都这样做,所以我基本上可以得到介于两者之间的所有内容。 [海报][/海报] [日期][/日期] [内容][/内容]
  • @xzerox 这段代码做了你原来做的事情。如果你需要改变它,这是一个新问题。不过,这很容易做到 - 只需将其更改为返回 IEnumerable 并使用 .Select() 投影。
猜你喜欢
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
相关资源
最近更新 更多