我需要替换部分字符串,一个是 RGBA ,另一个是 RGB ,两者都来自 Textbox上的CSS样式表在Visual Basic中使用strong>。
事情有点复杂,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。
请问有人帮帮我吗?先谢谢你。
答案 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
我希望有效。