Word regex oplopende nummers

Status
Niet open voor verdere reacties.

d0d0d0

Nieuwe gebruiker
Lid geworden
22 aug 2018
Berichten
2
Goedemiddag allemaal,

Ik wil van een vrij fors bestand met cijferreeksen, deze verdubbelen waarbij de 8 een 9 wordt. Bijvoorbeeld:

[8091115] wordt [8091115]9091115
8091116 wordt 80911169091116
8091117 wordt 80911179091117
etc

Met jokertekens vind ik (met [?]) alle cijfers die ik wil vervangen, maar het lukt me niet om binnen zoek en vervang de cijfers ook op te laten lopen.

Iemand ideeën?
 
Als je alleen 8 door 9 wil vervangen maak je daat toch de regex van?

een reeks cijfers beginnend met een 8 is:
Code:
(8([0-9]+))

Als je dat vervangt met

$19$2 (afhankelijk van welke regex je gebruikt kan het ook %19%2 oid zijn) en dan zou dat moeten werken zoals je wil?
 
Code:
Option Explicit

Public Sub ReeksDubbel()

'[8091115] wordt [8091115]9091115
'8091116 wordt 80911169091116#
'8091117 wordt 80911179091117#

    Dim strReeks As String, strReeksSchoon As String, strReeksDubbel As String

    strReeks = "[8091115]"
    'strReeks = "8091116"
    'strReeks = "8091117"

    With CreateObject("vbscript.regexp")
        .Global = False    'false is alleen de eerste 8, true is alle achten
        .Pattern = "\[*(\d+)\]*"
        strReeksSchoon = .Execute(strReeks)(0).submatches(0)
        .Pattern = "8"
        strReeksDubbel = strReeks & .Replace(strReeksSchoon, "9")
        '        Debug.Print strReeksDubbel
    End With

End Sub
 
Laatst bewerkt:
Bedank voor het meedenken. Ik had er bij moeten melden dat deze nummers weer in een reeks verstopt zitten. Dus:

0000000000000000000000000220000002200C000000002200C8091117[7 spaties]

Moet worden

0000000000000000000000000220000002200C000000002200C80911179091117

en dat een aantal duizend keer
 
De regex(p) van wampier werkt, waarom weet ik nog niet precies
Ik wil altijd regex(p) nog leren.
Code:
Option Explicit

Public Sub ReeksDubbel()

    Dim strReeks As String, strReeksDubbel As String

    strReeks = "0000000000000000000000000220000002200C000000002200C8091117       "

    With CreateObject("vbscript.regexp")
        .Global = False    'false is alleen de eerste 8, true is alle achten
        .Pattern = "(8([0-9]+))"
        strReeksDubbel = .Replace(strReeks, "$19$2")
        Debug.Print strReeksDubbel
    End With

End Sub
 
Het is niet zo ingewikkeld hoor :)

als de reeksen altijd zijn zoals gemeld kun je veiliger op de laatste 8 in de reeks matchen en dan vooruit werken maar soit.

- Match een reeks beginnend met 8 volgend door een onbekend aantal cijfers --> 8[0-9]+ (kan ook geschreven als 8\d+)
- Dat hele blok wil je vervangen door: origineel + 9 + deel achter 8 van origineel
- hele blok matchen: (8[0-9]+)
- deel achter 8 matchen: 8([0-9]+)
- hele blok : (8([0-9]+))
- nummers zijn op volgorde van openingshaakjes: hele blok is $1, deel achter 8 is $2
- vervangingsstring: origineel ($1) + 9 + deel achter 8 ($2) --> $19$2
 
Bedankt voor de uitleg

Het is niet zo ingewikkeld hoor :)
Ik ben al een paar keer met een tutorial begonnen, en vind het eerste begin best moeilijk.
Maar ik weet als je het eerste begin onder de knie hebt en je een idee hebt van de achterliggende processen, het makkelijker wordt.
 
Gebruik ook een site zoals:

https://regexr.com/

dan kun je real-time spelen met een oplossing en verschillende manieren van werken proberen (hoewel PCRE wel veel krachtiger is dan MS's oplossing). notepad++ heeft ook een krachtige search&replace op basis van regex

Het moeilijkste is om gewone zoekoparachten los te laten en denken in een algemene oplossing. De algemene oplossing schrijf je dan om in de regex
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan