Hi Kuno,
jetzt habe ich Dein o.g. Schriftgrössen-Script benutzt, um die Schriftschnitte einer Selektion ohne erzwungene Fontänderung der gesamten Selektion setzen zu können.
Aber mit Regex habe ich bis heute noch nie Kontakt gehabt.
Mein Script:
Private Sub ändereSelectedSchriftschnitt(sSchnitt As Integer)
Dim rtb = tsc_TextEditor_RTFBox
' Selektion merken
Dim rtbs = rtb.SelectionStart
Dim rtbsl = rtb.SelectionLength
If rtb.SelectionLength > 0 Then
Dim rt = rtb.SelectedRtf
' Bold Start und Ende entfernen
If (sSchnitt And 1) = 1 Or (sSchnitt And 1) = 0 Then
For Each m As Match In Regex.Matches(rt, "\\b0", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
For Each m As Match In Regex.Matches(rt, "\\b\s", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
For Each m As Match In Regex.Matches(rt, "\\b", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
End If
' Italic Start und Ende entfernen
If (sSchnitt And 2) = 2 Or (sSchnitt And 1) = 0 Then
For Each m As Match In Regex.Matches(rt, "\\i0", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
For Each m As Match In Regex.Matches(rt, "\\i\s", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
For Each m As Match In Regex.Matches(rt, "\\i", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
End If
' Underline Start und Ende entfernen
If (sSchnitt And 4) = 4 Or (sSchnitt And 1) = 0 Then
For Each m As Match In Regex.Matches(rt, "\\ulnone", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
For Each m As Match In Regex.Matches(rt, "\\ul\s", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
For Each m As Match In Regex.Matches(rt, "\\ul", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
End If
' Strikeout Start und Ende entfernen
If (sSchnitt And 8) = 8 Or (sSchnitt And 1) = 0 Then
For Each m As Match In Regex.Matches(rt, "\\strike0", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
For Each m As Match In Regex.Matches(rt, "\\strike\s", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
For Each m As Match In Regex.Matches(rt, "\\strike", _
RegexOptions.RightToLeft)
rt = rt.Remove(m.Index, m.Length)
Next
End If
' Schriftschnitt am Anfang und Ende der Selektion setzen
Dim n As Match
n = Regex.Match(rt, "\\pard")
' Bold
If (sSchnitt And 1) = 1 Then
rt = rt.Insert(n.Index, $"\b") & rt & "\b0"
End If
' Italic
If (sSchnitt And 2) = 2 Then
rt = rt.Insert(n.Index, $"\i") & rt & "\i0"
End If
' Underline
If (sSchnitt And 4) = 4 Then
rt = rt.Insert(n.Index, $"\ul") & rt & "\ulnone"
End If
' StrikeOut
If (sSchnitt And 8) = 8 Then
rt = rt.Insert(n.Index, $"\strike") & rt & "\strike0"
End If
' In RTF übernehmen
rtb.SelectedRtf = rt
' Selektion erneuern
rtb.SelectionStart = rtbs
rtb.SelectionLength = rtbsl
End If
End Sub Ich konnte aber nicht herausfinden, wie ich die jeweils drei Suchbedingungen in den vier Schleifen in je eine Schleife mit der RegEx.matches-Abfrage packen kann.
Kannst Du mir hier vielleicht einen Tip geben?
Beste Grüsse |