【问题标题】:C# Best way to retrieve strings that's in quotation mark?C# 检索引号中的字符串的最佳方法?
【发布时间】:2012-07-06 12:53:04
【问题描述】:

假设我得到以下文本(在字符串数组中)

engine.STEPCONTROL("00000000","02000001","02000043","02000002","02000007","02000003","02000008","02000004","02000009","02000005","02000010","02000006","02000011");
    if("02000001" == 1){
        dimlevel = 1;
    }
    if("02000001" == 2){
        dimlevel = 3;
    }

我想提取引号之间的字符串并将其放入单独的字符串数组中。例如,提取的 string[] 将包含 00000000, 02000001, 02000043....

对此最好的方法是什么?我应该使用正则表达式以某种方式解析这些行并将其拆分吗?

【问题讨论】:

  • 你是说STEPCONTROL的参数是你提供的文本还是整个块是字符串数组中的一个项目???
  • 正如发布的那样,您的字符串不包含引号......只有 C# 中的符号使用"
  • 我认为该字符串包含上面指定的确切文本,包括 engine.STEPCONTROL、if 等
  • 这就是我看了 5 遍后认为他在说的话。
  • Sokwhan 能否澄清一下。

标签: c# .net regex string


【解决方案1】:

我个人认为不需要正则表达式。如果您可以确定输入字符串始终如所描述的那样,并且其中不会有任何转义序列或以任何其他方式发生变化,您可以使用以下内容:

    public static string[] ExtractNumbers(string[] originalCodeLines)
    {
        List<string> extractedNumbers = new List<string>();

        string[] codeLineElements = originalCodeLines[0].Split('"');
        foreach (string element in codeLineElements)
        {
            int result = 0;
            if (int.TryParse(element, out result))
            {
                extractedNumbers.Add(element);
            }
        }

        return extractedNumbers.ToArray();
    }

它不一定是最有效的实现,但它很短,很容易看出它做了什么。

【讨论】:

  • 这与我正在寻找的非常接近。但是,这些数字是十六进制的,所以 int.TryParse 并没有捕捉到我所说的所有数字。
  • TryParse 调用的一个小改动就可以解决这个问题:int.TryParse(element, Globalization.NumberStyles.HexNumber, Globalization.NumberFormatInfo.CurrentInfo, out result)
【解决方案2】:

可能是

    string data = "\"00000000\",\"02000001\",\"02000043\"".Replace("\"", string.Empty);
    string[] myArray = data.Split(',');

或在 1 行中

 string[] data = "\"00000000\",\"02000001\",\"02000043\"".Replace("\"", string.Empty).Split(',');

【讨论】:

    猜你喜欢
    • 2011-08-18
    • 1970-01-01
    • 2016-10-30
    • 2013-12-10
    • 2016-01-24
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多