2016-05-24 9 views
1

Ich versuche, eine Liste von Dateinamen zu einer CSV-Datei zu analysieren, indem Sie die ersten 2 - Zeichen pro Zeile in eine |. Das Problem ist, dass die Dateinamen selbst auch das Zeichen enthalten, nach dem ich suche.Wie kann ich nur die ersten beiden Übereinstimmungen pro Zeile ersetzen, mit regex in Notepad ++

Meine Rohdaten sieht ungefähr so ​​aus:

12055371-1-Florence - BW Letter of Intent HB Comments 9-4-14-2.DOCX 
12057668-2-EB-DUE-M- SBuxbaum FHA Benefit Plans-2.DOCX 
12058210-1-Redline Letter of Intent-2.PDF 
12058029-3-Florence Hospital--Order Establishing Bid Procedures-HB 9-23-14-2.DOCX 
12058020-10-Florence - BW Letter of Intent 10,10,14 Revisions-2.DOCX 

Mit Notepadd ++ on the fly zu ersetzen, aber ich bin nicht sicher, welche Regex funktioniert diese Elemente zu identifizieren und zu ersetzen.

+0

** [alternativ] (https://regex101.com/r/zB6tX4/1) ** – rock321987

Antwort

2

Sie - nicht entsprechen, entsprechen den Anfang der Zeilen bis zum zweiten -:

match ^(.*?)-(.*?)- 
replace by \1|\2| 

Erläuterung:

  • ^ entspricht den Anfang der Zeile (0 Breite Spiel) .
  • (.*?) passt jedes Zeichen auf nicht gierige Weise an: Wenn das nächste Zeichen übereinstimmen kann, wird es dies zulassen. Das Ergebnis ist gruppiert, sodass später darauf verwiesen werden kann.
  • \1 und \2 sind Rückverweise und beziehen sich auf die beiden (.*?) Gruppen.

Hinweis: für die Effizienz Sie die nicht-gierige Übereinstimmungen durch das negierte Klasse ersetzen könnte [^\-], die jeden Charakter bedeutet aber -, die - entkommen, weil es in diesem Zusammenhang ein Sonderzeichen ist. Die Gruppen würden dann ([^\-]*) werden. Natürlich spielt es keine Rolle, ob es sich um eine einmalige Operation handelt.

Verwandte Themen