Unterstützung bei RegEx

.point

Lieutenant
Registriert
Mai 2006
Beiträge
853
Hallo,
ich brauche Hilfe bei einer RegEx

Folgender String ist gegeben

Code:
00043872;18|19|42
00012345;301|302|303
00056578;12
00098798;12|15|29|33|35|42|45|48|52|53
00115688;1|2|3|4|5|6|7|8|9|10|111|112

Ich möchte alle "1|" durch "|87" ersetzen. "2|" durch "88|" usw.

Wenn ich nach "1|" suche, dann wird leider auch aus 301| --> 3188| und aus 111| --> 1188|

Wie suche ich nach genau diesem String "1|" ?
Ich habe schon viele probiert, doch das Sonderzeichen | bereitet mir Probleme
 
Dafür brauchst du doch kein Regex da kann man doch einfach string replacement nutzen?
 
Skaro schrieb:
Dafür brauchst du doch kein Regex da kann man doch einfach string replacement nutzen?

Ich habe hier eine Datei. Diese möchte ich in Notepad++ bearbeiten (Find&Replace).
 
Steht vor dem 1| immer ein ; ?

Steht vor der 2| immer ein | ?

Soweit ich das logisch beurteile: Ja - dann könntest du ja entsprechend suchen.
 
.point schrieb:
Wenn ich nach "1|" suche, dann wird leider auch aus 301| --> 3188| und aus 111| --> 1188|

Wie suche ich nach genau diesem String "1|" ?
Ich habe schon viele probiert, doch das Sonderzeichen | bereitet mir Probleme

Such doch nach dem String "|1|" oder ";1|" oder "|1\r\n" ?
 
lechef schrieb:
Steht vor dem 1| immer ein ; ?

Steht vor der 2| immer ein | ?

Soweit ich das logisch beurteile: Ja - dann könntest du ja entsprechend suchen.

Leider nein. ; steht theoretisch immer vor 1|.
| steht nicht immer vor 2|. Es kann auch sein, dass ; vor 2| steht. :-/

Daher wollte ich das mit RegEx machen, und genau nach diesem String "1|" , "2|", usw. suchen. Egal wo es steht.
 
Soll eigentlich nur die erste Zahl nach dem Semikolon erhöht werden oder alle?

Da ich grade Lust auf ein bisschen Programmieren hatte, habe ich mal ein kleines Python-Skript geschrieben, dass wahlweise beides machen kann.

Code:
increase_all_numbers = False
value = 87

src = open("testfile.txt")

for line in src:
    left, right = line.strip().split(";")
    temp_right = right.split("|")

    if increase_all_numbers:
        temp_right = [str(int(x) + value) for x in temp_right]
    else:
        temp_right[0] = str(int(temp_right[0]) + value)


    right = "|".join(temp_right)

    print("%s;%s" % (left, right))
 
Zuletzt bearbeitet:
.point schrieb:
Ich möchte alle "1|" durch "|87" ersetzen. "2|" durch "88|" usw.
Wenn Du Windows 10 1703 hast, dann kannst Du eine #bash installieren.

Mit Perl kann man das dann als Einzeiler Lösen (Deine Datei = point.txt):
Code:
00043872;18|19|42
00012345;301|302|303
00056578;12
00098798;12|15|29|33|35|42|45|48|52|53
00115688;1|2|3|4|5|6|7|8|9|10|111|112
Perl-Aufruf:
Code:
$>perl -F';' -lane '$F[1]=~s/(\d+)($|\|)/86+$1.$2/ge; print join";",@F'  point.txt
Resultat:
Code:
00043872;104|105|128
00012345;387|388|389
00056578;98
00098798;98|101|115|119|121|128|131|134|138|139
00115688;87|88|89|90|91|92|93|94|95|96|197|198
Alle Zahlen hinter dem Semikolon um 86 hochgezählt.
 
Zurück
Oben