Outlook Regex find and replace in geselecteerde tekst

Status
Niet open voor verdere reacties.

hmwul

Gebruiker
Lid geworden
15 dec 2012
Berichten
460
Op voorhand, geen idee of het kan . . .

Ik zoek een macro dat een regex zoek en vervang uitvoert, t.w. een macro die extra dubbele (lege) regels in geselecteerde tekst in Outlook verwijderd.

3x return (eventueel voorafgegaan door spaties) vervangen door 1x return

In regex:
find: ((\s+?\r\n){3}|(\s+?\r\n){2})
repl: \r\n

zie attachment.
(het is geen fraai stukje regex, heb er geen verstand van, maar het werkt zo te zien)

Alleen in geselecteerde tekst.

Zou dit mogelijk zijn?

Bij voorbaat dank!
 

Bijlagen

  • SnagIt-16062023 080021.png
    SnagIt-16062023 080021.png
    35 KB · Weergaven: 29
Je zou het onderstaande kunnen proberen:

Code:
Sub VerwijderDubbeleRegels()
    Dim objItem As Object
    Dim objInsp As Outlook.Inspector
    Dim objEditor As Word.Document
    Dim objSelection As Word.Selection
    Dim objRegex As Object
    
    ' Maak een nieuw reguliere expressie-object aan
    Set objRegex = CreateObject("VBScript.RegExp")
    
    ' Definieer het zoekpatroon
    objRegex.Pattern = "(\s+?\r\n){3}|(\s+?\r\n){2}"
    
    ' Controleer of er een item is geselecteerd
    If Application.ActiveExplorer.Selection.Count = 0 Then
        Exit Sub
    End If
    
    ' Haal het geselecteerde item op
    Set objItem = Application.ActiveExplorer.Selection(1)
    
    ' Controleer of het item een e-mailbericht is
    If objItem.Class = olMail Then
        ' Haal de HTML-body van het bericht op
        Set objInsp = objItem.GetInspector
        Set objEditor = objInsp.WordEditor
        Set objSelection = objEditor.Application.Selection
        
        ' Selecteer de volledige inhoud van het bericht
        objSelection.WholeStory
        
        ' Zoek en vervang met behulp van de reguliere expressie
        With objRegex
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            objSelection.Text = .Replace(objSelection.Text, vbCr & vbLf)
        End With
        
        ' Sla de wijzigingen op
        objEditor.Save
        
        ' Geef een melding dat de bewerking is voltooid
        MsgBox "Dubbele regels zijn verwijderd.", vbInformation
    End If
End Sub
 
Dank voor alle moeite.

Helaas... spijtig genoeg werkt het niet: de macro wenst de (alle) tekst op te slaan als een word document,
terwijl ik alleen in de geselecteerde tekst de dubbele regels wil verwijderen.

Sorry.

Nogmaals hartelijk dank voor de genomen moeite!

p.s.: voor de goede orde, het gaat hier om Outlook (uit Office 365)
 
Code:
Option Explicit

Public Sub VerwijderDubbeleRegels()

    Dim objOutlook As Object
    Dim objMail As Object
    Dim objInspector As Object
    Dim objWordEditor As Object
    Dim strDirty As String
    Dim strClean As String

    Set objOutlook = GetObject(, "Outlook.Application")
    Set objMail = objOutlook.ActiveExplorer.Selection.Item(1)
    Set objInspector = objMail.GetInspector
    Set objWordEditor = objInspector.WordEditor
    strDirty = objWordEditor.Application.Selection.Range.Text

    With CreateObject("VBScript.RegExp")
        .Pattern = "^\s+$"
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        strClean = .Replace(strDirty, "")
    End With

    objWordEditor.Application.Selection.Range.Text = strClean

End Sub
 
Dank.

Achteraf kwam ik er achter dat...

Find: (\s+?\r\n){2}
Repl: \r\n

ook volstaat.
vind: 2x nieuwe regel, al dan niet met 'voorloop-spaties', zal ik maar zeggen.
verv: 1x nieuwe regel.

Moet ik .pattern aanpassen naar "(\s+?\r\n){2}"
 
Nee, (\s+?\r\n){2} is dubbelop.
\s stands for “whitespace character”. Again, which characters this actually includes, depends on the regex flavor. In all flavors discussed in this tutorial, it includes [ \t\r\n\f]. That is: \s matches a space, a tab, a carriage return, a line feed, or a form feed.
bron: https://www.regular-expressions.info/shorthand.html

Ik ben ook geen expert in regex, en in het begin heb ik ook maar wat geprobeerd dat soms werkte.
Totdat ik inzag dat het volgen van een goede tutorial de tijd en de moeite waard is, zie https://www.regular-expressions.info/quickstart.html
 
Laatst bewerkt:
Ik ben ook geen expert, verre van, ik sta nog niet eens in de schaduw van experts... mag dat ook niet.
Ik test regex in RegexBuddy. Diezelfde website, kijk onder 'Tools'.

In RegexBuddy worden alle lege regels weggehaald, met \s+$, alles staat direct onder elkaar.
Als ik de macro uitvoer in Outlook worden de extra regels niet verwijderd, maar de regelafstand van 1 naar 1,5 gezet, of zoiets.
In ieder geval verder uit elkaar.

Het spijt me, ik zou willen dat positiever nieuws had...

Ik stel voor dit maar even te laten voor wat het is.

Het is sneller om de tekst in een tekst editor te plaatsen, de regex uit te voeren en dan de boel terug te 'copy-pasten'.
Dat op zich werkt. Het is even extra gedoe.

Dank nogmaals voor de genomen moeite.
 
Klopt. Stond inderdaad zo in je macro, die ik heb uitgevoerd. Helaas, met eerder genoemd resultaat.
Laat het varen alphamax.
Dank voor de moeite.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan