regex C#正则表达式由逗号或空格分隔,但在单引号或双引号中时忽略

im9ewurl  于 2022-11-18  发布在  C#
关注(0)|答案(1)|浏览(174)

Hello world“波士顿红袜队”,“辣香肠比萨饼”,“奶酪比萨饼”,啤酒
输出应为

Hello
World
Boston Red Sox
Pepperoni Pizza
Cheese Pizza
Beer

这是我的

class Program
{
    static void Main(string[] args)
    {
        string input = System.IO.File.ReadAllText(@"input.txt");
        string censoredfile = System.IO.File.ReadAllText(@"censored.txt");
        var outputFile = "output.txt";
        var results = Regex.Split(censoredfile, "(?:^|,|[ ])(\"(?:[^\"]+|\"\")*\"|[^,]*)");
        

        foreach (var result in results)
        {
            Console.WriteLine(result);
            
        }
        
    }
}

这是我的输出
你好世界“波士顿红袜队”
意大利辣香肠比萨
“奶酪比萨”
啤酒
区块引号

nhjlsmyf

nhjlsmyf1#

您可以使用

var text = "Hello world \"Boston Red Sox\", 'Pepperoni Pizza', 'Cheese Pizza', beer";
var pattern = @"""(?<r>[^""]*)""|'(?<r>[^']*)'|(?<r>[^\s,]+)";
var tokens = Regex.Matches(text, pattern).Cast<Match>().Select(x => x.Groups["r"].Value).ToList();
Console.WriteLine(string.Join("\n", tokens));

参见C# demo.输出:

Hello
world
Boston Red Sox
Pepperoni Pizza
Cheese Pizza
beer

也可以查看regex demo。* 详细信息 *:

  • "(?<r>[^"]*)"-",然后将除"以外的零个或多个字符捕获到组“r”中,然后将"字符
  • |-或
  • '(?<r>[^']*)'-',然后将除'之外的零个或多个字符捕获到组“r”中,然后将'字符
  • |-或
  • (?<r>[^\s,]+)-“r”组:一个或多个除空格和逗号以外的字符。

相关问题