2

我正在开发一个 vb.net 实用程序,并且需要在字符串中查找所有不同的字符串。

所以基本上我会有一个看起来像这样的字符串。 1.875{0};10;0.25|1.875;9;0.25|{2}1.875;1.875;0.25|14.125;{1}1.875;0.25|{0}14.125;16.125{1};0.25|1.875;{0}16.125;0.25|1.875;9;0.25{2}|1.875;8;0.25

所以你可以看到我在字符串 {0}、{1}、{2} 中有这些字符

然而,可以这么说,每个“占位符”都有多个。

因此,我需要帮助编写一个函数,该函数将采用上面的字符串字符串并在此示例中返回计数 3,因为源字符串中有 3 个不同的占位符。它会模仿 sql 中的不同命令。

我确定这使用了某种正则表达式,但我无法绕开它来仅检索不同的正则表达式。不是所有的倍数。

任何帮助表示赞赏。提前致谢。

4

2 回答 2

2

使用正则表达式和一点 LINQ 就可以达到预期的效果

Imports System.Text.RegularExpressions
Imports System.Linq

Private Function CountPlaceholders(source As String) As Integer
    Dim matches As MatchCollection = Regex.Matches(source, "{[0-9]+}")
    Return matches.Cast(Of Match)().Select(Function(m) m.Value).Distinct().Count()
End Function

首先,使用相当简单的正则表达式查找所有占位符。+after数字搜索将[0-9]找到一个或多个出现的数字,因此将找到占位符 0 到 n。

下一行是计算不同事件的原因。为了使 LINQ-to-Objects 扩展能够运行matches MatchCollection,必须将其中的每个项目强制转换为。Match之后,您选择对象的Value属性Match,过滤不同的值,并对它们进行计数。

于 2013-02-16T18:29:03.600 回答
0

是的,您可以使用正则表达式{\d+}进行匹配,但您是正确的,不会给您一个不同的列表。但是您可以遍历Regex.Matches返回的 Match 集合,提取Value并使用Distinct Linq 方法来获取不同条目的列表。

于 2013-02-16T18:02:16.880 回答