2016-09-23 8 views
3

Wie würde ich unter dem folgenden Beispiel den Bindestrich zwischen den Wörtern "CAST" und "DATETIME" finden? (CAST(N'2013-11-26 10:52:47.957' AS DateTime))Regex, um einen Bindestrich zwischen zwei bestimmten Wörtern zu finden

Das Muster tritt mehrmals pro Zeile auf. Es könnte Bindestriche irgendwo anders in der Zeichenfolge geben, die nicht übereinstimmen müssen.

INSERT [dbo].[tbl_Content] ([Template], [CreatedDate], [Url], [PublishedDate]) VALUES (N’gallery-item.aspx', CAST(N'2013-11-26 10:52:47.957' AS DateTime), N'some-url', CAST(N'2013-11-26 00:00:00.000' AS DateTime)) 
INSERT [dbo].[tbl_Content] ([Template], [CreatedDate], [Url], [PublishedDate]) VALUES (N’another-item.aspx', CAST(N'2013-11-26 10:52:47.957' AS DateTime), N'some-other-url', CAST(N'2013-11-26 00:00:00.000' AS DateTime)) 

CAST(.*)DateTime wählt alle Zeichen zwischen dem ersten Auftreten von „CAST“ und dem letzten Auftreten von „DATETIME-“ auf jeder Zeile. Es könnte andere Bindestriche in dieser Auswahl geben, die nicht übereinstimmen sollten.

- wird jeden Bindestrich im Dokument übereinstimmen.

Ich denke, ich muss diese beiden Muster irgendwie kombinieren, aber mein Regex-Wissen ist nicht existent. CAST(-)DateTime funktioniert nicht.

Was ist der richtige Weg, dies zu tun?

Wenn die Plattform wichtig ist, wird dies in Visual Studio Code zum Suchen-Ersetzen verwendet. Wenn dies nicht möglich ist, bin ich absolut offen für die Verwendung eines anderen Texteditors.

+0

Das auf welches Werkzeug/regex Bibliothek hängt passen Sie verwenden. –

+0

Hallo @ WiktorStribiżew, ich möchte dies in einem Suchen-Ersetzen in Visual Studio Code verwenden. Ich habe Angst, ich habe keine Ahnung, welche Bibliothek sie im Hintergrund verwenden – Turnip

+0

Sorry, aber es ist unmöglich, da VSC ECMAScript 5 Regex verwendet. –

Antwort

1

Wenn Sie Notepad ++ verwenden können, können Sie eine Regex basierend auf einem \G-Operator verwenden, mit dem Sie nach einer ersten Übereinstimmung aufeinanderfolgende Übereinstimmungen finden können.

Verwenden

(?:\bCAST\b|(?!^)\G)(?:(?!\b(?:DATETIME|CAST)\b)[^-])*\K- 

und ersetzen mit jedem Symbol (e) Sie wollen (nicht vergessen, dass Klammern in NPP Ersatz Muster maskiert werden müssen). Unten habe ich die - durch § ersetzt.

Einzelheiten:

  • (?:\bCAST\b|(?!^)\G) - ein ganzes Wort CAST oder die Endposition des vorherigen Spiel
  • (?:(?!\b(?:DATETIME|CAST)\b)[^-])* - ein temperiertes gierigen Token, das jede char passt aber - (siehe [^-]), das nicht der Fall ist Starten Sie eine Sequenz von ganzen Wörtern DATETIME oder CAST (siehe den negativen Lookahead (?!\b(?:DATETIME|CAST)\b))
  • \K - a Spiel Reset opeator: alle Text so weit angepasst ist
  • - verworfen - der Bindestrich wollen wir

enter image description here

+1

Das hat ein Vergnügen. Vielen Dank. Du hast mich gerettet, mehr als 4000 Einfügeanweisungen zu bearbeiten. – Turnip

Verwandte Themen