Ersetze "1Don't do this" mit "_1Don_t_do_that"

8

Ich muss die Schlüssel einer Schlüsselwertdatei wie folgt ändern:

%Vor%

bis

%Vor%
  • wird mit einem Unterstrich vorangestellt, wenn der String mit einer Zahl
  • beginnt
  • ersetzen Sie alle nicht alphanumerischen Zeichen durch Unterstriche
  • ändert die Wertzeichenfolge nicht

Ich kann es bei Bedarf in mehreren Schritten machen

Ich habe versucht, Dinge wie \"\w+[^\w]\w+\" = , aber es berücksichtigt nicht mehrere Leerzeichen und keine einfachen oder doppelten Anführungszeichen.

Jede Hilfe ist willkommen.

    
znat 08.07.2013, 21:23
quelle

2 Antworten

3

Unter der Annahme, dass keines Ihrer Anführungszeichen maskiert ist, sollte dies funktionieren:

%Vor%

Dies entspricht

  • entweder die Position zwischen " und eine Ziffer
  • oder ein nicht-alphanumerisches Zeichen (außer einem Zitat),

aber nur, wenn ihnen ein einfaches Anführungszeichen und ein Gleichheitszeichen folgen.

Sieh es live auf regex101 .

    
Tim Pietzcker 08.07.2013, 21:34
quelle
1

Ich bin nicht sicher, was Regex-Geschmack Xcode verwendet, aber solange es positive Lookahead (?=) unterstützt, sollte diese Reihe von Ersetzungen funktionieren:

  1. Vorstring mit Unterstrich, wenn der String mit einer Zahl beginnt
    • finden: ^"(?=\d)
    • Ersetze alle: "_
  2. Ersetzen Sie alle nicht alphanumerischen Zeichen durch Unterstriche, und stellen Sie sicher, dass die Wertzeichenfolge hinter dem steht, was wir ändern.
    • finden: [^a-zA-Z0-9](?=[^"]*"\s*=\s*"[^"]*")
    • Ersetze alle: _

Der zweite Schritt geht davon aus, dass in der Wertzeichenfolge keine Anführungszeichen vorkommen. sagen Sie mir, wenn Sie mit Backslash-Escape-Zeichen umgehen müssen.

    
Rory O'Kane 08.07.2013 21:41
quelle

Tags und Links