【问题标题】:How do I parse a string using C# and regular expressions?如何使用 C# 和正则表达式解析字符串?
【发布时间】:2009-06-28 12:13:07
【问题描述】:

如何转换字符串:

"Microsoft Windows XP Professional x64 Edition|C:\\WINDOWS|\\Device\\Harddisk4\\Partition1"

"Microsoft Windows XP Professional x64 Edition"

...使用正则表达式?

我想删除| 符号之后的所有内容。通过Regex.Replace很容易实现吗?我在哪里可以找到Regex.Replace 模式的语法描述?

【问题讨论】:

  • 如果您只关心第一段,请使用 driis 的答案。如果您想扩展您关心的内容,请使用拆分方法。

标签: c# regex string parsing


【解决方案1】:

您不需要正则表达式。您可以使用子字符串:

var text = @"Microsoft Windows XP Professional x64 Edition|C:\WINDOWS|\Device\Harddisk4\Partition1";
text = text.Substring(0,text.IndexOf("|"));

【讨论】:

  • 但万一文本中不包含“|”,那么就会出现异常。所以最好把它放在 try catch 如果不总是确定是否有“|”在输入字符串中。
  • 或者更好的是,分三行执行,对 IndexOf 的结果进行 if 检查,完全避免异常。
  • 正确,使用前应检查IndexOf的返回值,确保|字符实际上存在于字符串中。代码示例说明了这个概念。
【解决方案2】:
string str = @"Microsoft Windows XP Professional x64 Edition|C:\WINDOWS|\Device\Harddisk4\Partition1";
string str2 = str.Split('|')[0];

str2 = "Microsoft Windows XP Professional x64 Edition"

【讨论】:

  • 我假设这不是用户输入的字符串。如果是 a) 用户界面不会很实用,并且 b) 应用程序可能是供个人使用的。对于生产应用程序,您肯定需要验证用户输入。
【解决方案3】:

如果你确定要使用正则表达式:

Regex p = new Regex(@"([^|]*)|");
string s = @"Microsoft Windows XP Professional x64 Edition|C:\\WINDOWS|\\Device\\Harddisk4\\Partition1";
s = p.Match(s).Value;

【讨论】:

    【解决方案4】:

    使用 String.Split(),它产生一个 String[],然后拾取元素零。

    【讨论】:

      【解决方案5】:
      string GetOSType(string data)
      {
            return data.Split(Convert.ToChar("|"))[0];
      }
      

      这是假设字符串总是要拆分的。可能是为了确定你想在这个函数周围包裹一个 try-catch 块。

      【讨论】:

      • 你不能使用字符常量'|'而不是调用方法 Convert.ToChar("|")?
      【解决方案6】:

      如果您仍然想了解更多关于正则表达式的信息,这里是一个很好的 Cheat Sheet 和一个简单的在线 regex builder tool 来帮助您入门。

      【讨论】:

        【解决方案7】:

        一个简单的解决方案可能是使用:

            string szOrig = "Microsoft Windows XP Professional x64 Edition|C:\\WINDOWS|\\Device\\Harddisk4\\Partition1";
            string[] separator = new string[] { "|" };
            string[] szTemp = szOrig.Split(separator, StringSplitOptions.RemoveEmptyEntries);
            string szRequired = szTemp[0];
        

        可能不是最好的方法,但有效。

        【讨论】:

        • 同意 Botz3000 关于匈牙利语的看法。特别是因为 C# 不使用以 sz 代表的以零结尾的字符串。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 2019-12-10
        相关资源
        最近更新 更多