需要拆分不同材质组合的字符串。需要使用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;
}
但它没有返回任何比赛。有人可以帮忙吗?
答案 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;
}
希望这有助于...... !!