基于正则表达式拆分字符串

时间:2012-12-09 18:10:22

标签: c# regex c#-4.0

需要拆分不同材质组合的字符串。需要使用reg表达式提取所有材料。

可能的输入是

 65%POLYESTER 30%COTTON 5%WOOL
 95% COTTON DENIM 5% OTHERS
 100% HS POLYPROPYLENE
 100% POLYPROPYLENE HEATSET

输出应为

65% Polyester
30% Cotton
5% wool

试过这个

static IList<string> SplitContent(string input)
        {
            var list = new List<string>();
            var regex = new Regex("\\d*\\.\\d+%?[A-Za-z \\s]");
            var matches = regex.Matches(input);
            foreach (Match item in matches)
            {
                list.Add(item.Value);
            }
            return list;
        }

但它没有返回任何比赛。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

使小数点分隔符.可选,并将描述部分更改为“除空格之外的任何内容”,如下所示:

var regex = new Regex("\\d*(?:\\.)?\\d+%?[^\\s]+");

你的程序的其余部分工作正常,不需要任何修改(link to ideone)。

答案 1 :(得分:3)

更好的方法是

List<string> output=Regex.Matches(yourInput,@"\d+(\.\d+)?%?[a-zA-Z\s]+")
                         .Cast<Match>()
                         .Select(x=>Regex.Replace(x.Value,@"(%)(?=\S)","$1 "))
                         .ToList();

\d+匹配1到多位数字

(\.\d+)?匹配一个点和1到多位数0到1次(?

[a-zA-Z\s]+匹配该类1中的任何字符多次..

当有一个不是[a-zA-Z\s]的字符或者你来到字符串结尾时,匹配会中断

答案 2 :(得分:0)

        string ip = "65%POLYESTER 30%COTTON 5%WOOL 95%COTTON DENIM 5%OTHERS 100%HS POLYPROPYLENE 100%POLYPROPYLENE HEATSET";
        List<string> lst = new List<string>();
        lst = SplitContent(ip);
        foreach (var item in lst)
        {
            string[] arr=item.Split('%');

            Console.WriteLine(arr[0]+"% "+arr[1]);
        }

在您的SplitContent函数中,您的正则表达式不正确。它应该如下所示:

     public static List<string> SplitContent(string input)
    {
        var list = new List<string>();
        var regex = new Regex("\\d*\\%[A-Za-z]*");
        var matches = regex.Matches(input);
        foreach (Match item in matches)
        {
            list.Add(item.Value);
        }
        return list;
    }

希望这有助于...... !!