Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于正则表达式拆分字符串_C#_Regex_C# 4.0 - Fatal编程技术网

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

C# 基于正则表达式拆分字符串,c#,regex,c#-4.0,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

需要拆分由不同材质组合而成的字符串。需要使用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;
        }
静态IList拆分内容(字符串输入)
{
var list=新列表();
var regex=new regex(“\\d*\.\\d+%?[A-Za-z\\s]”);
var matches=regex.matches(输入);
foreach(匹配项中的匹配项)
{
列表.添加(项.值);
}
退货清单;
}

但它不会返回任何匹配项。有人能帮忙吗?

将十进制分隔符设置为可选,并将描述部分更改为“除空格外的任何内容”,如下所示:

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

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

将十进制分隔符设置为可选,并将描述部分更改为“除空格外的任何内容”,如下所示:

var regex = new Regex("\\d*(?:\\.)?\\d+%?[^\\s]+");
程序的其余部分工作正常,不需要任何修改()。

更好的方法是

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

\d+
匹配1到多个数字

(\。\d+)
匹配一个点和1到多个数字0到1次(

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

当有一个字符不是
[a-zA-Z\s]
或当您到达字符串末尾时,匹配将中断

List<string> output=Regex.Matches(yourInput,@"\d+(\.\d+)?%?[a-zA-Z\s]+")
                         .Cast<Match>()
                         .Select(x=>Regex.Replace(x.Value,@"(%)(?=\S)","$1 "))
                         .ToList();
        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]);
        }
List output=Regex.Matches(您的输入,@“\d+(\.\d+)?%?[a-zA-Z\s]+”)
.Cast()
.Select(x=>Regex.Replace(x.Value,@“(%)(?=\S)”,“$1”))
.ToList();

\d+
匹配1到多个数字

(\。\d+)
匹配一个点和1到多个数字0到1次(

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

当有一个字符不是
[a-zA-Z\s]
或当您到达字符串末尾时,匹配将中断
字符串ip=“65%聚酯30%棉5%羊毛95%棉牛仔布5%其他100%HS聚丙烯100%聚丙烯热定型”;
        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]);
        }
List lst=新列表(); lst=拆分内容(ip); foreach(lst中的var项目) { 字符串[]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;
    }
公共静态列表拆分内容(字符串输入)
{
var list=新列表();
var regex=new regex(“\\d*\\%[A-Za-z]*”);
var matches=regex.matches(输入);
foreach(匹配项中的匹配项)
{
列表.添加(项.值);
}
退货清单;
}
希望这有助于

string ip=“65%涤纶30%棉5%羊毛95%棉牛仔布5%其他100%HS聚丙烯100%聚丙烯热固性”;
List lst=新列表();
lst=拆分内容(ip);
foreach(lst中的var项目)
{
字符串[]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;
    }
公共静态列表拆分内容(字符串输入)
{
var list=新列表();
var regex=new regex(“\\d*\\%[A-Za-z]*”);
var matches=regex.matches(输入);
foreach(匹配项中的匹配项)
{
列表.添加(项.值);
}
退货清单;
}

希望这有助于

它只返回%的值。它不会将相关材料与他们一起退回。例如,如果我通过“95%棉牛仔布5%其他”,它将返回95%和5%。但预期产量为“95%棉牛仔布”,而“5%其他”将其更改为“\\d*(?:\\)?\\d+%?[*A-Za-z\\s]+”,并随相关值一起返回。谢谢。@Naresh我强烈建议使用逐字字符串:
@“\d*(?:\)?\d+%?[*A-Za-z\s]+”
。另外(@dasblinkenlight)
[^\s]=\s
和(这只是一个替代建议,选择您认为更容易阅读的选项)可以编写
[.]
而不是
\。
[^\\s]不考虑字符串,如果百分比值后面有空格。它正在移动到下一个百分比值。它只返回百分比值。它不会将相关材料与他们一起退回。例如,如果我通过“95%棉牛仔布5%其他”,它将返回95%和5%。但预期产量为“95%棉牛仔布”,而“5%其他”将其更改为“\\d*(?:\\)?\\d+%?[*A-Za-z\\s]+”,并随相关值一起返回。谢谢。@Naresh我强烈建议使用逐字字符串:
@“\d*(?:\)?\d+%?[*A-Za-z\s]+”
。另外(@dasblinkenlight)
[^\s]=\s
和(这只是一个替代建议,选择您认为更容易阅读的选项)可以编写
[.]
而不是
\。
[^\\s]不考虑字符串,如果百分比值后面有空格。它正在移动到下一个百分比值。@Some1.Kill.The.DJ:你能解释一下你的正则表达式吗?@Some1.Kill.The.DJ:如果我需要在%值后面加空格,我该怎么做?例如,“65%聚酯纤维”应该变成像“65%聚酯纤维”@Some1.Kill.The.DJ:…哦,天哪,你错过了最令人困惑的part@Some1.Kill.The.DJ:请解释一下:+(\.\d+)%?@BhushanFirake
\d+(\.\d+)?%?
将允许像
33%
33.33
333
2.2%
这样的匹配。因此我将
%
设置为可选<