1

需要拆分由不同材料组合而成的字符串。需要使用 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;
        }

但它没有返回任何匹配项。有人可以帮忙吗?

4

3 回答 3

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]或当您到达字符串末尾时,匹配会中断

于 2012-12-09T18:35:08.630 回答
3

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

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

您的程序的其余部分工作正常,不需要任何修改(指向 ideone 的链接)。

于 2012-12-09T18:17:23.660 回答
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;
    }

希望这可以帮助...!!

于 2012-12-09T18:37:37.217 回答