如何使用正则表达式将字符串中的十六进制值替换为rgb值

时间:2012-09-20 09:41:49

标签: c#

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

3 个答案:

答案 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个选项。