如何在Visual Basic

时间:2017-10-25 10:19:59

标签: regex vb.net visual-studio-2012

我需要替换部分字符串,一个是 RGBA ,另一个是 RGB ,两者都来自 Textbox上的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行代码),有没有办法用正则表达式呢?

注意:我不会替换它,包括;,因为有时候它会有重要的标志,这样我就可以保持原样,通过方式,我使用的是Visual Studio 2012。

请问有人帮帮我吗?先谢谢你。

1 个答案:

答案 0 :(得分:1)

尝试以下功能:

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或更多空格,然后打开paren(转义),后跟0或更多空格。

[ ]*" & sR & "[ ]*,[ ]*" & sG & "[ ]*,[ ]*" & sB & "[ ]* - 将数字与0或更多以逗号分隔的空格匹配

(,[0-9 \.]+\)|\)) - 匹配一个逗号后跟一个数字,小数点或空格,或者只是一个关闭的paren(转义)。

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

使用此功能:

Dim sResult As String = ReplaceRGBValue("rgba(15,90,110,0.35)", "15,90,110", "40,133,183")

编辑:要批量进行替换,请尝试将此函数放入for循环中,如下所示:

  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

我希望有效。