C#regex需要在\player\n之后加上字符\
我需要一个正则表达式模式,它将容纳以下内容 我从UDP服务器得到一个响应,它是一个很长的字符串,每个单词由C#regex需要在\player\n之后加上字符\,c#,regex,C#,Regex,我需要一个正则表达式模式,它将容纳以下内容 我从UDP服务器得到一个响应,它是一个很长的字符串,每个单词由\分隔,例如: \g79g97\g879o\wot87gord\player_0\name0\g6868o\g78og89\g79g79\player_1\name1\gyuvui\yivyil\player_2\name2\g7g87\g67og9o\v78v9i7 我需要\player\u n\后面的字符串,因此在上面的示例中,我需要name0、name1和name3 我知道这是今天的
\
分隔,例如:
\g79g97\g879o\wot87gord\player_0\name0\g6868o\g78og89\g79g79\player_1\name1\gyuvui\yivyil\player_2\name2\g7g87\g67og9o\v78v9i7
我需要\player\u n\
后面的字符串,因此在上面的示例中,我需要name0
、name1
和name3
我知道这是今天的第二个正则表达式问题,但我已经订购了这本书(掌握正则表达式)!多谢各位
更新。Ellusive的正则表达式模式就足够了,我可以将匹配项(0)添加到文本框中。但是,如果要将所有匹配项添加到文本框中,该怎么办
textBox1.Text += match.Captures[0].ToString(); //this works fine.
如何将“所有”匹配捕获添加到文本框中It’很抱歉,这个正则表达式类对我来说是全新的。试试这个:
\\player_\d+\\([^\\]+)
试试这个:
\\player_\d+\\([^\\]+)
要仅获取玩家名称,您可以使用:
(?<=\\player_\d+\\)[^\\]+
(?要仅获取玩家姓名,您可以使用:
(?<=\\player_\d+\\)[^\\]+
(?我认为这个测试示例可以帮助您
string inp = @"\g79g97\g879o\wot87gord\player_0\name0\g6868o\g78og89\g79g79\player_1\name1\gyuvui\yivyil\player_2\name2\g7g87\g67og9o\v78v9i7";
string rex = @"[\w]*[\\]player_[0-9]+[\\](?<name>[A-Za-z0-9]*)\b";
Regex re = new Regex(rex);
Match mat = re.Match(inp);
for (Match m = re.Match(inp); m.Success; m = m.NextMatch())
{
Console.WriteLine(m.Groups["name"]);
}
string inp=@“\g79g97\g879o\wot87gord\player\u 0\name0\g6868o\g78og89\g79g79\player\u 1\name1\gyuvui\yivyil\player\u 2\name2\g7g87\g67og9o\v78v9i7”;
字符串rex=@“[\w]*[\\]player\[0-9]+[\\](?[A-Za-z0-9]*)\b”;
正则表达式re=新正则表达式(rex);
匹配材料=重新匹配(inp);
for(Match m=re.Match(inp);m.Success;m=m.NextMatch())
{
Console.WriteLine(m.Groups[“name”]);
}
您可以从m.Groups[“name”]
中获取玩家的姓名,我认为这个测试示例可以帮助您
string inp = @"\g79g97\g879o\wot87gord\player_0\name0\g6868o\g78og89\g79g79\player_1\name1\gyuvui\yivyil\player_2\name2\g7g87\g67og9o\v78v9i7";
string rex = @"[\w]*[\\]player_[0-9]+[\\](?<name>[A-Za-z0-9]*)\b";
Regex re = new Regex(rex);
Match mat = re.Match(inp);
for (Match m = re.Match(inp); m.Success; m = m.NextMatch())
{
Console.WriteLine(m.Groups["name"]);
}
string inp=@“\g79g97\g879o\wot87gord\player\u 0\name0\g6868o\g78og89\g79g79\player\u 1\name1\gyuvui\yivyil\player\u 2\name2\g7g87\g67og9o\v78v9i7”;
字符串rex=@“[\w]*[\\]player\[0-9]+[\\](?[A-Za-z0-9]*)\b”;
正则表达式re=新正则表达式(rex);
匹配材料=重新匹配(inp);
for(Match m=re.Match(inp);m.Success;m=m.NextMatch())
{
Console.WriteLine(m.Groups[“name”]);
}
您可以从m.Groups[“name”]中获取玩家的姓名
+1--提示:对于正则表达式,最好在没有特定语言添加的情况下发布纯表达式。就像在本例中,正则表达式文字符号/slashes/
在C#中没有意义。感谢您的添加!我在Perl中使用了它们,所以分隔符对我来说似乎很自然。它不起作用,但如果我在每一端的“/”上,我得到一个匹配“\player\n\playername\”。这是可以的,但我更喜欢“playername”本身。您需要使用第一个匹配组。我不知道这在C中是如何工作的,但这在了解正则表达式的任何其他语言中都不太难。@brux:请参阅以获得快速概述(这里也解释了如何处理组).1--提示:对于正则表达式,最好在不添加特定语言的情况下发布纯表达式。就像在本例中,正则表达式的文字符号/slashes/
在C#中没有意义。感谢您的添加!我一生都在Perl中使用它们,因此分隔符对我来说似乎很自然。它不起作用,但如果我删除“/”从每一端,我得到一个匹配项“\player\n\playername\”。这是可以的,但我更喜欢它自己的“playername”。您需要使用第一个匹配组。我不知道这在C中是如何工作的,但这在任何了解正则表达式的其他语言中都不太难。@brux:请参阅以快速了解概况(这里也解释了如何处理组)。嗨,tomolak,我使用的是Elquive发布的正则表达式,因为它工作正常。但是如果我尝试将第二个匹配添加到文本框,我会得到一个“超出范围错误”。如果我删除该行,第一个匹配(0)添加正确。在与模式比较的字符串中,大约有8个playername:s@brux:如果你出现“超出范围”的错误,那你就是做错了。总是在代码中进行范围检查。嗨,tomolak,我使用的是Elquive发布的正则表达式,因为它工作正常。但是如果我尝试将第二个匹配添加到文本框中,我会得到一个“超出范围错误”。如果删除该行,则添加第一个匹配项(0)。在与模式比较的字符串中,大约有8个playernames:s@brux:如果出现“超出范围”的错误,则无论如何都是错误的。请始终在代码中进行范围检查。