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

C# 如何使用正则表达式将字符串中的rgb值替换为十六进制值,c#,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 要从字符串中获取值,您可以基于“rbg(和”的索引执行子字符

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

要从字符串中获取值,您可以基于
“rbg(
的索引执行子字符串,然后在
和/或
”、“
上执行后续拆分。然后

请看这里:

或:

怎么样

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个选项

System.Drawing.Color color = System.Drawing.Color.FromArgb(longRgb);
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");
                }
            );
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);