C# 将字符串分成三部分

标签 c# string split substring

大家好我几个小时前问过这个问题C# get username from string. split

现在我遇到了难题。试图从这个字符串中获取 Acid Playerm249

    L 02/28/2012 - 06:14:22: "Acid<1><VALVE_ID_PENDING><CT>" 
killed "Player<2><VALVE_ID_PENDING><TERRORIST>" with "m249"

我试过了

int start = Data.ToString().IndexOf('"') + 1;
            int end = Data.ToString().IndexOf('<');
            var Killer = Data.ToString().Substring(start, end - start);

            int start1 = Data.ToString().IndexOf("killed") + 1;
            int end1 = Data.ToString().IndexOf('<') + 4;
            var Victim = Data.ToString().Substring(start1, end1 - start1);

但是它在最后一行显示了这个异常

Length cannot be less than zero.
Parameter name: length

是否可以同时获取玩家姓名和最后一个字符串 (m249)

坦克

最佳答案

这是一个简单的示例,说明如何使用正则表达式来完成此操作。根据字符串的变化程度,这个可能适合您。我假设引号 (") 以及它们之间的文本是一致的。您需要在顶部添加这一行:

Using System.Text.RegularExpressions;

代码:

string input = "L 02/28/2012 - 06:14:22: \"Acid<1><VALVE_ID_PENDING><CT>\" killed \"Player<2><VALVE_ID_PENDING><TERRORIST>\" with \"m249\"";
Regex reg = new Regex("[^\"]+\"([^<]+)<[^\"]+\" killed \"([A-Za-z0-9]+)[^\"]+\" with \"([A-Za-z0-9]+)\"");
Match m = reg.Match(input);
if (m.Success)
{
    string player1 = m.Groups[1].ToString();
    string player2 = m.Groups[2].ToString();
    string weapon = m.Groups[3].ToString();
}

正则表达式的语法分解是这样的:

[^\"]+

意思是,直到我们找到双引号 (")

\"

表示将引号作为字符串的下一部分,因为前一个术语将我们带到它,但不会超过它。

([^<]+)<

括号表示我们对这部分的结果感兴趣,我们将寻找直到找到小于号(<)。因为这是我们要提取的第一个“组”,所以它在比赛中被称为 Groups[1]。我们再次找到我们正在搜索的字符来使用它并继续我们的搜索。

<[^\"]+\" killed \"

这将再次搜索,由于没有括号而不会保留结果,直到我们点击下一个引号。然后我们手动指定 ("killed ") 的字符串,因为我们对后面的内容感兴趣。

([A-Za-z0-9]+)

这将为我们的 Group[2] 结果捕获字母数字、大写或小写的任何字符。

[^\"]+\"

搜索并忽略其余部分,直到我们找到下一个双引号

with \"

我们用作标记的另一个文字字符串

([A-Za-z0-9]+)

同上,返回带括号的字母数字作为我们的Group[3]

\"

以最后一句话结束。

希望这能解释它。谷歌搜索“正则表达式备忘单”对于记住这些规则非常有用。

关于C# 将字符串分成三部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492320/

相关文章:

c - 如何在 C 中复制此字符串?

java - StringTokenizer 未查看选项卡 ("\t")作为空白 ("\\s+")

c++ - 使用istringstream()区分 "0"和非数字字符串

iphone - UI标签分割

python - Pandas :在分隔符的基础上过滤特定列中数据的行

c# - EF6 : Code First Complex Type

c# - 使用反射唯一标识方法或构造函数

c# - 使用代码修复提供程序时如何删除 SyntaxToken

c# - Autofac 和通用命令模式

python - 不使用 if 语句生成多个变量输出