如何在长字符串中找到所有以'$'开头并以空格结尾的单词?

Zai*_*ikh 5 c# regex string

在C#中,如何找到所有的字开头的"$"符号与空间的结束,在相当长的字符串,使用正则表达式?

Pie*_*kel 9

尝试:

var matches = Regex.Matches(input, "(\\$\\w+) ");
Run Code Online (Sandbox Code Playgroud)

在上面,\\w匹配单词字符.这些是AZ,az, - 和_如果我是正确的.如果你想匹配不是空格的所有东西,你可以使用\\S.如果您想要一个特定的集合,请通过例如指定[a-zA-Z0-9].

围绕(\\$\\w+)确保特定匹配的括号,matches[0].Groups[1].Value;给出了支持内部的值(因此,不包括尾随空格).

作为一个完整的例子:

string input = "$a1 $a2 $b1 $b2";

foreach (Match match in Regex.Matches(input, "(\\$\\w+) "))
{
    Console.WriteLine(match.Groups[1].Value);
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

$a1
$a2
$b1
Run Code Online (Sandbox Code Playgroud)

$ b2当然被省略,因为它没有尾随空格.


Ahm*_*ıcı 5

您可以在没有正则表达式的情况下尝试它,这可能会更快.

string longText = "";
    List<string> found = new List<string>();
    foreach (var item in longText.Split(' '))
    {
        if (item.StartsWith("$"))
        {
            found.Add(item);
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑:在Zain Shaikh的评论之后,我写了一个简单的程序进行基准测试,结果如下.

        string input = "$a1 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2";
        var s1 = Stopwatch.StartNew();
        double first;
        foreach (Match match in Regex.Matches(input, "(\\$\\w+) "))
        {
        }
        s1.Stop();
        Console.WriteLine(" 1) " + (s1.Elapsed.TotalMilliseconds * 1000 * 1000).ToString("0.00 ns"));
        first = s1.Elapsed.TotalMilliseconds;
        s1.Reset();

        s1 = Stopwatch.StartNew();

        foreach (var item in input.Split(' '))
        {
            if (item.StartsWith("$"))
            {
            }
        }
        s1.Stop();
        Console.WriteLine(" 2) " + (s1.Elapsed.TotalMilliseconds * 1000 * 1000).ToString("0.00 ns"));
        Console.WriteLine(s1.Elapsed.TotalMilliseconds - first);
Run Code Online (Sandbox Code Playgroud)

输出:

1) 730600.00 ns

2)  53000.00 ns

-0.6776
Run Code Online (Sandbox Code Playgroud)

这意味着字符串函数(也使用foreach)比正则表达式函数更快;)