2017-10-25 1 views
0
내가 문자열의 일부를 교체해야

은, 하나는 RGBA이고, 다른 하나는 텍스트 상자에 CSS 스타일 시트의에서 모두하는 RGB입니다 기본 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)") 

문제는 때 알파 값을 변경하거나가 RGB를 들어 공간 ... 을 가지고 때마다 교체 :

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

내가 그것을 대체 사용하고있어 비주얼 베이직에서 Replace 기능입니다 spacing 옵션을 사용하지만 di와 함께 사용해야합니다. fferent 색상, 코드가 너무 길어지면 (색상 당 4 줄의 코드), 정규식으로도 그렇게 할 수있는 방법이 있습니까?

참고 : 나는 때때로는 중요한 플래그가 있기 때문에 ;을 포함한 대체하지 않기 때문에 그대로 내가 그런데, 그것을하겠습니다 그런 식으로, 나는 비주얼 스튜디오를 사용하고 2012 년

누군가 나를 도와 줄 수 있습니까? 미리 감사드립니다.

답변

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)[ ]*\([ ]* - 중 오픈 괄호이어서 상부 0 이상의 공백 뒤에 소문자 RGB 혹은 RGBA (이스케이프) 대전 뒤에 0 개 이상의 공백이옵니다.

[ ]*" & sR & "[ ]*,[ ]*" & sG & "[ ]*,[ ]*" & sB & "[ ]*

- 콤마

(,[0-9 \.]+\)|\))

의해 분리 0 이상의 공백 대전 번호 - 숫자 소수점 또는 공간, 또는 단지 근접 괄호 (이스케이프) 뒤에 콤마 일치.

여분의 괄호는 및 ${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 

내가 작품 바랍니다.

+0

편집되었으므로 OP의 동작을 더 자세히 모방합니다. – PerpetualStudent

+0

안녕하세요, 수작업으로 작업 할 수도 있습니다. 텍스트는 CSS 스타일 시트에서 가져온 것입니다. 문자열이 더 많으며, 약 4000 줄의 스타일이 있습니다. 찾을 수있는 함수를 만들 수 있습니까? 텍스트의 문자열이 자동으로? 도와 줘서 고마워, 정말 고마워. – Minion

+0

예제 코드를 사용하면'TextBox2.Text = ReplaceRGBValue (TextBox1.Text, "15,90,110", "40,133,183")'작동합니까? – PerpetualStudent

관련 문제