我有一个字符串格式的svg文件,看起来像这样http://jsfiddle.net/mumg81qq/5/这个文件包含十六进制/ rgb格式的颜色代码。
我想在两个数组中提取这两种不同类型的颜色格式。
十六进制颜色可以是
的格式fill:#303744
---OR---
fill="#020202"
和rgb颜色可以是
的格式fill:rgb(48,49,55)
---OR---
fill="rgb(205,149,36)"
结果数组应该如下所示
hexColor = ["#303744","#020202"]
rgbColor = ["rgb(48,49,55)","rgb(205,149,36)"]
我只能设法编写搜索一种十六进制字符串的代码。
string searchHex1 = "fill=\"#", searchHex2 = "fill:#";
string searchRGB1 = "fill=\"rgb(", searchRGB2 = "fill:rgb(";
List<string> hexColor = new List<string>();
List<string> rgbColor = new List<string>();
string sHexColor = "";
int index = 0;
do
{
index = svgFile.IndexOf(searchHex1, index);
if (index != -1)
{
sHexColor = svgFile.Substring(index, 7);
if (!hexColor.Contains(sHexColor))
{
hexColor.Add(sHexColor);
}
index++;
}
} while (index != -1);
以最有效的方式我想搜索4种不同类型的十六进制和rgb颜色并将其存储在两个不同的数组中。
答案 0 :(得分:1)
这样的事情应该适合你,input
是你的文件作为字符串
string hexapattern = @"#[0-9a-fA-F]{6}";
string rgbpattern = @"rgb\([0-9]+\,[0-9]+\,[0-9]+\)";
Regex rgxHexa = new Regex(hexapattern);
MatchCollection matches = rgxHexa.Matches(input);
foreach (Match match in matches)
{
// add to hexa array
}
Regex rgxRGB = new Regex(hexapattern);
matches = rgxRGB.Matches(input);
foreach (Match match in matches)
{
// add to rgb array
}
并且不要忘记using System.Text.RegularExpressions;
答案 1 :(得分:1)
会是这样的......
string hexRegex = @"fill[:=]""?(#[a-fA-F0-9]{6})""?";
string rgbRegex = @"fill[:=]""?(rgb\( *\d{1,3} *, *?\d{1,3} *, *\d{1,3} *\))""?";
string oneRegex = string.Format("({0}|{1})", hexRegex, rgbRegex);
string testdata = @"fill:#303744" +
@"fill=""#020202""" +
@"fill:rgb(48,49,55)" +
@"fill=""rgb(205,149,36)""";
IEnumerable<string> colorCodes = Regex.Matches(testdata, oneRegex)
.Cast<Match>()
.Select(match => match.Groups[1].Value.Replace(" ",""));
答案 2 :(得分:0)
这是单线版:
var hexMatches = Regex.Matches(svg, @"(?<=fill:|="")#[0-9a-fA-F]{6}")
.Cast<Match>().Select (m => m.Value).ToList();
var rgbMatches = Regex.Matches(svg, @"(?<=fill:|="")rgb\((\d{1,3},?){3}\)")
.Cast<Match>().Select (m => m.Value).ToList();
您会注意到使用积极的外观&#39>:
(?<=fill:|="")
它们完全是可选的,只是在那里,所以如果引入了不是填充的其他颜色值,您就不会得到不需要的匹配。我不太了解文件的来源,所以我会留给你保留或不保留。