我正在尝试编写一个正则表达式,通过它我可以用字符串中的十六进制代码替换rgb颜色值。该字符串可能包含以下类型:
=> rgb(0, 0, 0) 0 0 0
=> rgb(0 100, 200)
=> 0 0 rgb(201,45,65)
首先,我想从字符串中访问rgb值,然后用十六进制代码替换它。结果将是:
=> #XXXXXX 0 0 0
=> #XXXXXX
=> 0 0 #XXXXXX
答案 0 :(得分:1)
var newstr = Regex.Replace(
input,
@"rgb\([ ]*(\d+)[ ]*,[ ]*(\d+)[ ]*,[ ]*(\d+)[ ]*\)",
m => {
return "#" + Int32.Parse(m.Groups[1].Value).ToString("X2") +
Int32.Parse(m.Groups[2].Value).ToString("X2") +
Int32.Parse(m.Groups[3].Value).ToString("X2");
}
);
答案 1 :(得分:0)
要从字符串中获取值,您可以根据"rbg("
和")"
的索引执行子字符串,然后在" "
和/或","
上执行后续拆分。然后...
见这里:
http://bytes.com/topic/c-sharp/answers/268611-convert-rgb-hexadecimal
public static string ToHtml ( System.Drawing.Color color )
{
if (System.Drawing.Color.Transparent == color)
return "Transparent";
return string.Concat("#", (color.ToArgb() & 0x00FFFFFF).ToString("X6"));
}
或者:
System.Drawing.Color color = System.Drawing.Color.FromArgb(longRgb);
答案 2 :(得分:0)
怎么样
string str = "rgb(0 100, 200)";
int startindex = str.IndexOf("rgb(");
int endindex = str.LastIndexOf(')');
string result = str.Substring(0, startindex)
+ "#XXXXXX"
+ str.Substring(endindex + 1);
尝试了你提供的所有3个选项。