繁体   English   中英

正则表达式识别C#中的(X,Y,...和Z)?

[英]Regular expression to recognize (X, Y, … and Z) in C#?

给定下面的输入字符串集:

  • 一,二,三
  • 一,二,三和四
  • 一,二,三,四和五

(......等N + 1个案例)

我如何可以构造一个正则表达式可以识别短语这样的任何数量的名词,并把每个逗号分隔的名词和后面的最终名词结合作为一个单独的捕获组? 如果不可能,您将使用什么方法来解析和捕获这样的输入? 我正在使用C#Regex对象进行解析。

注意,这里的名词只是样本数据(一,二,三,四,五等),逗号后面的空格可能会被省略。 此外,名词可能是由空格分隔的多词短语

奖金回合 :如果你可以干净地识别(逗号)“一个”和“一个和两个”的非逗号分隔的情况,同一个表达式中有捕获。

试试这个正则表达式

\\b((?!and)\\w+)\\b

正则表达式演示: http//regex101.com/r/kC5rR2

您还可以在RegexPal查看结果

在此输入图像描述

尝试这个。 但是,在“两个和三个”形式的最后一场比赛中,我无法获得“,”

(?<word>\w+,* and \w+)|(?<word>(?<=^|,\s?|and )\w+)

我使用一种简单的方法代替Regex只是为了让代码对其他开发人员来说简单易读。

以下代码使用控制台应用程序向您显示此方法。 希望它能帮到你。

干杯!

class Program
    {
        static void Main(string[] args)
        {
            string input = "one, two, three, four, five, thirty one and six";

            // Get all nouns into a string array
            string [] allNouns = getNouns(input);

            // Print the result
            foreach (string noun in allNouns)
            {
                Console.WriteLine(noun);                
            }
            Console.ReadLine();
        }

        private static string[] getNouns(string input)
        {
            string[] nouns = input.Split(',');

            if (input.ToLower().IndexOf("and") > 0 && nouns.Length > 0)
            {
                string[] lastTwoNouns = nouns[nouns.Length - 1].Trim().ToLower().Replace("and", "~").Split('~');

                Array.Resize(ref nouns, nouns.Length + 1);

                nouns[nouns.Length - 2] = lastTwoNouns[0];
                nouns[nouns.Length - 1] = lastTwoNouns[1];
            }

            for (int i = 0; i < nouns.Length; i++)
            {
                nouns[i] = nouns[i].Trim();
            }

            return nouns;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM