0

我正在尝试编写一个正则表达式,通过它我可以用字符串中的十六进制代码替换 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
4

3 回答 3

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");
                }
            );
于 2012-09-20T09:52:23.503 回答
0

要从您的字符串中获取值,您可以根据 and 的索引创建一个子字符串"rbg("")"然后在" "and/or上进行后续拆分","。然后...

看这里:

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);
于 2012-09-20T09:46:41.537 回答
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 个选项。

于 2012-09-20T09:55:41.700 回答