Regex 如何在Visual Basic中用正则表达式替换部分字符串

Regex 如何在Visual Basic中用正则表达式替换部分字符串,regex,vb.net,visual-studio-2012,Regex,Vb.net,Visual Studio 2012,我需要替换部分字符串,一个是RGBA,另一个是RGB,这两个字符串都来自Visual Basic中文本框上的CSS样式表 事情有点复杂,alpha值不同,有时它有空格,我想正则表达式是更好的方法,但我不知道怎么做,让我举几个例子: // RGBA rgba(15,90,110,0.4); rgba(15, 90,110, 0.2); rgba(15, 90, 110, 0.35); rgba(15, 90, 110,0.14); rgba(15,90, 110,0.1) !important;

我需要替换部分字符串,一个是RGBA,另一个是RGB,这两个字符串都来自Visual Basic中文本框上的CSS样式表

事情有点复杂,alpha值不同,有时它有空格,我想正则表达式是更好的方法,但我不知道怎么做,让我举几个例子:

// RGBA
rgba(15,90,110,0.4);
rgba(15, 90,110, 0.2);
rgba(15, 90, 110, 0.35);
rgba(15, 90, 110,0.14);
rgba(15,90, 110,0.1) !important;
rgba(15,90, 110, 0.1);

// RGB
rgb(21, 25, 140);
rgb(21,25, 140);
rgb(21, 25,140);
rgb(21,25,140);
rgb(21, 25,140) !important;

// And so on...
我用来替换它的是Visual Basic中的
replace
函数:

' RGBA
TextBox2.Text = TextBox1.Text.Replace("rgba(15,90,110,0.35)", "rgba(40,133,183,0.35)")

' RGB
TextBox2.Text = TextBox1.Text.Replace("rgb(21,25,140)", "rgb(40,175,81)")
当alpha值更改或有空格时会出现问题。。。 对于RGB,我替换了每个间距选项,但我必须使用不同的颜色,而且代码太长(每种颜色4行代码),有没有办法使用regex呢

注意:我不替换它,包括
因为有时候它有一个重要的标志,所以我会保持它的原样,顺便说一句,我使用的是Visual Studio 2012


有人能帮帮我吗?高级版谢谢。

请尝试以下功能:

Private Function ReplaceRGBValue(ByVal i_sReplaceText As String, ByVal i_sOldRGBValue As String, ByVal i_sNewRGBValue As String) As String
    Dim sR As String = i_sOldRGBValue.Split(",")(0)
    Dim sG As String = i_sOldRGBValue.Split(",")(1)
    Dim sB As String = i_sOldRGBValue.Split(",")(2)
    Dim sPattern As String = "((?:rgba|rgb|RGBA|RGB)[ ]*\([ ]*)([ ]*" & sR & "[ ]*,[ ]*" & sG & "[ ]*,[ ]*" & sB & "[ ]*)(,[0-9 \.]+\)|\))"
    Dim sReplacement As String = "${1}" & i_sNewRGBValue & "${3}"
    Return System.Text.RegularExpressions.Regex.Replace(i_sReplaceText, sPattern, sReplacement)
End Function
正则表达式是:

(?:rgba | rgb | rgba | rgb)[]*\([]*
-匹配大写或小写rgb或rgba,后跟0或更多空格,后跟空格(转义),后跟0或更多空格

[]*”&sR&“[]*,[]*”&sG&“[]*,[]*”&sB&“[]*”
-用逗号分隔的0或更多空格匹配数字

(,[0-9\.]+\)|\)
-匹配逗号后跟数字、小数点或空格,或仅匹配一个空格(转义)

额外的括号是捕获组,您可以在
sReplacement
中用
${1}
${3}
替换回字符串

按如下方式使用此功能:

Dim sResult As String = ReplaceRGBValue("rgba(15,90,110,0.35)", "15,90,110", "40,133,183")
  Private Sub BatchUpdate()
        ' Add more find/replace values to this array like {{"find,this,value","replace,with,this"}, _
        '                                                  {"also,find,this","and,replace,again"},...}
        Dim sReplacements(,) As String = {{"15,90,110", "40,133,183"}, _
                                          {"21,25,140", "40,175,81"}}
        Dim sResult As String = TextBox1.Text
        For i As Integer = 0 To UBound(sReplacements)
            sResult = ReplaceRGBValue(sResult, sReplacements(i, 0), sReplacements(i, 1))
        Next
        TextBox2.Text = sResult
    End Sub
编辑:要批量执行替换,请尝试将此函数放入for循环中,如下所示:

Dim sResult As String = ReplaceRGBValue("rgba(15,90,110,0.35)", "15,90,110", "40,133,183")
  Private Sub BatchUpdate()
        ' Add more find/replace values to this array like {{"find,this,value","replace,with,this"}, _
        '                                                  {"also,find,this","and,replace,again"},...}
        Dim sReplacements(,) As String = {{"15,90,110", "40,133,183"}, _
                                          {"21,25,140", "40,175,81"}}
        Dim sResult As String = TextBox1.Text
        For i As Integer = 0 To UBound(sReplacements)
            sResult = ReplaceRGBValue(sResult, sReplacements(i, 0), sReplacements(i, 1))
        Next
        TextBox2.Text = sResult
    End Sub

我希望它能起作用。

经过编辑,使其更接近OP中的行为。您好,它可能适用于手动操作,我的文本来自Textbox上的CSS样式表,它有更多的字符串,大约4000行样式。。。是否可以使函数自动查找文本上的字符串?谢谢你的帮助,我真的很感激。使用你的示例代码,
TextBox2.Text=ReplaceRGBValue(TextBox1.Text,“15,90110”,“40133183”)
work?嗨,不,它不起作用,TextBox1上的文本是一个CSS样式表,大约有4000行。请注意,这个函数将处理要替换的文本中的空格。答案中的代码将替换您的所有示例。