C# 基于正则表达式拆分字符串
需要拆分由不同材质组合而成的字符串。需要使用reg表达式提取所有材质 可能的输入是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
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%
这样的匹配。因此我将%
设置为可选<