【发布时间】:2016-12-17 14:40:55
【问题描述】:
如何将此代码重写为 VB.net?在线转换工具在尝试转换函数的返回部分时会作呕。
private static DataColumn[] ParseColumns(string tableHtml)
{
MatchCollection headerMatches = Regex.Matches(
tableHtml,
HeaderPattern,
ExpressionOptions);
return (from Match headerMatch in headerMatches
select new DataColumn(headerMatch.Groups[1].ToString())).ToArray();
}
private static DataColumn[] GenerateColumns(MatchCollection rowMatches)
{
int columnCount = Regex.Matches(
rowMatches[0].ToString(),
CellPattern,
ExpressionOptions).Count;
return (from index in Enumerable.Range(0, columnCount)
select new DataColumn("Column " + Convert.ToString(index))).ToArray();
}
具体来说,在线工具会给我这样的东西:
Private Shared Function GenerateColumns(rowMatches As MatchCollection) As DataColumn()
Dim columnCount As Integer = Regex.Matches(rowMatches(0).ToString(), CellPattern, ExpressionOptions).Count
Return (From index In Enumerable.Range(0, columnCount)New DataColumn("Column " + Convert.ToString(index))).ToArray() End Function
最后一部分不正确:
(From index In Enumerable.Range(0, columnCount)New DataColumn("Column " + Convert.ToString(index))).ToArray()
我不明白这段 C# 代码试图做什么——它看起来像 LINQ 或类似的东西。
谢谢!
【问题讨论】:
-
不要使用正则表达式处理 html。 Html 是有效的 xml,例如
XDocument或XElement类将是更好的方法 -
@Fabio:在一般情况下,这是真的,但如果你知道你正在解析的内容的性质,并且它是一个有限的范围,正则表达式或其他形式的匹配/提取都可以。
-
@siride,用 Regex 解析 HTML 会带来不同的问题——例如:http://stackoverflow.com/a/1732454/1565525。使用 Xml 解析器将是处理 html 的更清晰、可读和可维护的方式。
-
@Fabio:是的,我们都看过那个愚蠢的答案。它在互联网上无处不在,并且仅在一般意义上是正确的。再次,了解您的域名。您不必使用最强大的工具来解决给定的问题。否则,我们将构建完整的编译器工具链来处理每种新的数据格式。例如,如果您要对格式一致的数据表进行屏幕抓取,那么正则表达式可能就可以了。