2017-10-25 2 views
0

Ich brauche zu ersetzen Teil-Strings zu ersetzen, ist man ein RGBA und der andere ist ein RGB, die beide aus einem CSS-Stylesheet auf Textbox in Visual Basic.Wie Teil der Zeichenfolge mit regulärem Ausdruck in Visual Basic

Die Sache ist ein wenig komplizierter, der Alpha-Wert variiert und manchmal hat es Räume, ich denke, regex der bessere Weg ist, es zu tun, aber ich weiß nicht, wie, lassen Sie mich einige Beispiele setzen:

// 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... 

Was ich verwende es zu ersetzen ist die Replace Funktion von Visual Basic:

' 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)") 

das Problem kommt, wenn der alpha-Wert ändert oder wenn es Räume hat ... Für die RGB ich je ersetzen Abstand Option, aber ich muss es mit di tun verschiedene Farben, und der Code wird zu lang (4 Zeilen Code pro Farbe), gibt es eine Möglichkeit, dies auch mit Regex zu tun?

Anmerkung: Ich ersetze es nicht ; einschließlich weil es manchmal die wichtig Flagge hat, so dass, wie ich es behalten werde, wie es ist, nebenbei bemerkt, ich bin mit Visual Studio 2012.

Kann mir bitte jemand helfen? Danke im Voraus.

Antwort

1

Versuchen Sie, die folgende Funktion:

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 

Die Regex ist:

(?:rgba|rgb|RGBA|RGB)[ ]*\([ ]* - Match entweder Groß- oder Kleinschreibung RGB- oder RGBA, gefolgt von 0 oder mehr Leerzeichen, gefolgt von offenen paren (entkommen) , gefolgt von 0 oder mehr Leerzeichen.

[ ]*" & sR & "[ ]*,[ ]*" & sG & "[ ]*,[ ]*" & sB & "[ ]* - Match Zahlen mit 0 oder mehr Räumen, die durch Komma getrennt

(,[0-9 \.]+\)|\)) - ein Kommas durch eine Zahl, Dezimalpunkt oder Raum, oder einfach nur einen engen paren (entkommen), gefolgt Spiel.

Die zusätzlichen Klammern sind Erfassungsgruppen, die Sie in die Zeichenfolge mit ${1} und ${3} in der sReplacement ersetzen können.

Mit dieser Funktion wie folgt aus:

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

EDIT: die Ersetzungen in Charge zu tun, versuchen Sie diese Funktion in ein, wie dies für Schleife setzen:

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 

ich, dass Werke hoffen.

+0

Editiert, damit es das Verhalten in OP genauer nachahmt. – PerpetualStudent

+0

Hallo, könnte es für die manuelle Arbeit funktionieren, der Text, den ich habe, ist aus einem CSS-Stylesheet auf Textbox, es hat viel mehr Strings und etwa 4000 Zeilen von Stilen ... ist es möglich, die Funktion zu finden Zeichenketten auf dem Text automatisch? Danke für deine Hilfe, ich schätze es sehr. – Minion

+0

Würde 'TextBox2.Text = ReplaceRGBValue (TextBox1.Text," 15,90,110 "," 40,133,183 ") mit Ihrem Beispielcode funktionieren? – PerpetualStudent

Verwandte Themen