【问题标题】:Split string by (') and Spaces but keep any space character between two consecutive (')用 (') 和空格分割字符串,但在两个连续的 (') 之间保留任何空格字符
【发布时间】:2021-04-04 21:34:23
【问题描述】:

我需要用 (' ') 或 (''') 分割字符串,但如果字符串中出现 ' ' 我只想保留那个空格。这是字符串的示例:

  1 7871.6 LIQ WCT GOR THP ' ' FIELD BHP /
  1 7871.6 'LIQ' 'WCT' 'GOR' 'THP' ' ' FIELD BHP /

我希望输出是:

1
7871.6
LIQ
WCT
GOR
THP

FIELD
BHP
/

任何帮助将不胜感激

【问题讨论】:

  • 如果字符串是1 7871.6 'LIQ WCT GOR' 怎么办?
  • 应该是 3 个输出:1、7871.6 和 LIQ WCT GOR。
  • 您可以使用 CSV 解析器,大多数都会让您指定分隔符(在您的情况下为空格)和行尾和文本限定符,它们允许在条目中使用分隔符(通常是双引号,但在您的情况下您将其设置为单引号)

标签: c#


【解决方案1】:

这样的事情应该让他完成工作..如果你不介意你的头从正则表达式中爆炸.. p.s 这应该涵盖你奇怪的额外情况:) 哦,所以我确保我相信正确的人我从https://stackoverflow.com/a/51432792/5963888得到了正则表达式。

var str = "1 7871.6 'LIQ' 'WCT' 'GOR' \"THP\" ' ' 'LIQ WCT GOR' FIELD BHP /";
var regex = new System.Text.RegularExpressions.Regex("([\"'])((?:\\\\1|(?:(?!\\1)).)*)(\\1)");
var match = regex.Matches(str)
    .Select(e => e.Groups)
    .Select( e => e[2].Value)
    .SelectMany( e =>
    {
        if(!(e.Trim() == String.Empty))
        {
            return e.Split();
        }
        return new[] { e };
    });
System.Console.WriteLine(String.Join(Environment.NewLine, match));

【讨论】:

  • 谢谢,我会尝试实现这两种解决方案
【解决方案2】:

这里有一些代码可以解决问题

    string str = "1 7871.6 'LIQ' 'WCT' 'GOR' 'THP' ' ' FIELD BHP /";


    string replaceToken  = "someValueThatYouChose";
    str = str.Replace(" ' ' ", $" {replaceToken} ");
    str = str.Replace("'", "");
    string[] splitValues = str.Split(" ");
    for (int i = 0; i < splitValues.Length; i++)
    {
        if(splitValues[i] == replaceToken){
            splitValues[i] = " ";
        }
    }
    // Here is your output
    foreach (var value in splitValues)
    {
        Console.WriteLine(value);
    }

【讨论】:

  • 这不适用于1 7871.6 'LIQ WCT GOR' 的 cmets 中的示例,其中结果应为“1”、“7871.6”和“LIQ WCT GOR”。即使使用原始示例,我也很确定他们希望 ' ' 有一个空格而不是空字符串@
  • 没关系,因为理论上该示例永远不会发生,您的解决方案工作正常..非常感谢您
  • @calarez 您可能希望将其更新为splitValue[i] = " ";,这样您将获得单个空格而不是空字符串,因为看起来您的预期结果确实包含一个空格。跨度>
  • 在这种情况下,它是单个空格还是空字符串都没有关系,我只需要任何值,因此总字数将始终相同(count=10)
猜你喜欢
  • 1970-01-01
  • 2020-05-16
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2010-09-09
相关资源
最近更新 更多