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

小数点記号を.オプションにし、次のように説明部分を「スペース以外」に変更します。

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

プログラムの残りの部分は正常に動作し、変更は必要ありません(ideoneへのリンク)。

于 2012-12-09T18:17:23.660 に答える
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 に答える
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 に答える