2016-12-08 7 views
0

ich diese mit Notepad ++ acheive versuchen
einen String finden und ein Muster, bevor sie ersetzen - Notepad ++

Eingabedatei hat Muster
< ein Code-Snippet-Anweisung - das variabe ist, gefolgt von ..> (Quality in Klammern)

-- "command xyz d 
    command rererere 
    command ;" (fair quality) 
---- "command xyz d 
    command rereredfdfdre 
    command ffdfdfdf ;" (good quality) 
---- "command xffddyz d 
    command rerfdferere 
    command ;" (good quality) 
----"command fdfdfxyz d 
    command refffdrerere 
    command fdfdff;" ( fair quality) 

Was ich will ist
--Look für alle Instanzen tun, wo es (fair quality) ist (beachten Sie, dass Abstand zwischen (and fair variabel ist und dann mit (fair quality)
o/p die gesamte Anweisung löschen ist wie folgt:

---- "command xyz d 
    command rereredfdfdre 
    command ffdfdfdf ;" (good quality) 
---- "command xffddyz d 
    command rerfdferere 
    command ;" (good quality) 

Ich habe versucht, einige grundlegende Regex Suche ersetzen für (fair quality) aber wie kann ich, bevor es from x to y die gesamte Zeichenfolge löschen?
Bitte nehmen Sie nicht an, dass das Abstandsmuster regelmäßig ist. Es wird
beispiel

"command xyz..( fair quality);" 
"command xyz (fair quality );" 

es eine Regelmäßigkeit zwischen zwei Zeichenkette im Abstand ist nicht ändern, die von Nutzen für regex Arbeit sein könnte.
Auch manchmal gibt es unnötige Zeilenumbrüche zwischen z.

"command  
xyz..( fair 
quality);" 

So der Linie Annahme Ende auch nicht würde also die genaue regex Logik
sein hilft - mir Fälle von fair
Go finden - Finden erste Instanz command vor dieser Instanz von fair
- Finden Sie die erste Instanz von " vor command. Wir werden dies X
nennen - 1. Instanz von " nach fair finden.Wir nennen diese Y
- Löschen X-Y

Antwort

1

Sie tun können:

  • Suchen nach: -+\s*"[^"]+?"\s*\(\s*fair quality\)
  • Ersetzen durch: NOTHING
  • Repalce alle

Erläuterung:

-+    : one or more dash 
\s*    : 0 or more spaces 
"    : a double quote 
[^"]+?   : one or more any character that is not a double quote 
"    : a double quote 
\s*    : 0 or more spaces 
\(    : an open parenthesis 
\s*    : 0 or more spaces 
fair quality : literally 'fair quality' 
\)    : a close parenthesis 
1

Sie mit temper greedy token solution

mit leeren
-*\s*"command\b((?!\bquality\b\s*\)).)*\(\s*fair\s+quality\s*\)(;")?\r?\n? 

ersetzen finden regex müssen, stellen Sie sicher, Regulärer Ausdruck und . Spiele ist Newline ausgewählt

Regex-Details:

  • -*\s*"command\b - passend zum ersten Instanz ", bevor Befehl
  • ((?!\bquality\b\s*\)).)* - alle Zeichen übereinstimmen, die nicht Teil von quality) mit Temperament gierig Token ist
  • \(\s*fair\s+quality\s*\)(;")?\r?\n? - entsprechen den fair quality Teil, einschließlich ;" und Newline hinter

Eingangstest

-- "command xyz d 
    command rererere 
    command ;" (fair quality) 
---- "command xyz d 
    command rereredfdfdre 
    command ffdfdfdf ;" (good quality) 
---- "command xffddyz d 
    command rerfdferere 
    command ;" (good quality) 
----"command fdfdfxyz d 
    command refffdrerere 
    command fdfdff;" ( fair quality) 
    ----"command fdfdfxyz d 
    command refffdrerere 
command  
xyz..( fair 
quality);" 
"command xyz..( fair quality);" 
"command xyz (fair quality );" 

Ausgang

---- "command xyz d 
    command rereredfdfdre 
    command ffdfdfdf ;" (good quality) 
---- "command xffddyz d 
    command rerfdferere 
    command ;" (good quality) 
Verwandte Themen