用 (') 和空格分割字符串,但在两个连续的 (') 之间保留任何空格字符

时间:2021-04-04 21:34:23

标签: c#

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

  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
/

任何帮助将不胜感激

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

这是一些可以解决问题的代码

    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);
    }
相关问题