2017-05-23 4 views
-2

ich eine lange Reihe Aufspalten wie unten gezeigt, wo es findet ‚END‘ Stichwort:Split eine lange Reihe von ein vollständiges Wort mit

string_end.Split(New String() {"END"}, StringSplitOptions.None) 

Das perfekt wäre die Zeichenfolge in mehrere Teile aufgeteilt, wo immer es findet ENDE' . Das Problem tritt jedoch auf, wenn eine Zeichenfolge das Wort "EMPFOHLEN" enthält. Es würde es als "RECOMM" und "ED" aufteilen. Ich möchte, dass es sich teilt, indem ich nach dem ganzen Wort suche, damit Wörter wie "EMPFOHLEN" so bleiben, wie es ist. Freundlich helfen.

C# und VB.NET-Codes würden ausreichen.

+0

Fügen Sie einfach ein Leerzeichen vor und nach END hinzu, wie es ein Wort ist. 'string_end.Split (Neue Zeichenfolge() {" END "}, StringSplitOptions.None)' – Mederic

+0

@Mederic Hey danke. funktionierte wie ein Charme :) –

+0

Froh, ich könnte helfen, ich werde die Antwort schreiben, damit Sie es validieren können :) – Mederic

Antwort

-1

Wenn Ihr auf der Suche einfach für das Wort: END dann fügen Sie einfach einen weißen Raum vor und nach:

string_end.Split(New String() {" END "}, StringSplitOptions.None) 

Nach ich empfehle nicht mit Split zu enthalten oder auszuschließen eine Linie.

Eine sauberere Lösung wäre einfach

For Each line As String In Lines 
    If line.Contains(" END ") Then 
     'Do Stuff 
    End If 
Next 

Sie könnten auch Regex tun verwenden, aber das hängt davon ab, ob Sie mit ihm vertraut sind.

Private _pattern As New Regex("\bEND\b", RegexOptions.Compiled) 
For Each line As String In Lines 
    Dim matches As MatchCollection = _pattern.Matches(line) 
    If matches.Count <> 0 Then 
     'Do Stuff 
    End If 
Next 
+0

das hat funktioniert. Vielen Dank! –

+0

'[...] aber das hängt davon ab, ob Sie damit vertraut sind - wenn nicht, lernen Sie es! –

+0

@SebastianBrosch Ja, deshalb habe ich es zuerst nicht aufgenommen – Mederic

1

können Sie Regex.Split verwenden, um dies zu lösen:

Dim rgx As New Regex("\bEND\b") 
Dim input As String = "RECOMMENDED AND THE END OF A STRING END" 
Dim result() As String = rgx.Split(input) 

'Output: 
'----------------------------- 
'result = {Length=3} 
'(0) = "RECOMMENDED AND THE " 
'(1) = " OF A STRING " 
'(2) = "" 

Die metacharacter \b ist ein Anker, wie die caret und dem Dollarzeichen. Es entspricht einer Position, die als "Wortgrenze" bezeichnet wird. Diese Übereinstimmung ist Nulllänge.
Es gibt drei verschiedene Positionen, die als Wortgrenzen in Frage kommen:

  • Vor dem ersten Zeichen in der Zeichenfolge, wenn das erste Zeichen ein Wortzeichen ist.
  • Nach dem letzten Zeichen in der Zeichenfolge, wenn das letzte Zeichen ein Wortzeichen ist.
  • Zwischen zwei Zeichen in der Zeichenfolge, wobei eins ein Wortzeichen und das andere kein Wortzeichen ist.

Quelle:

Warum Sie keine Leerzeichen auf einem String.Split verwenden sollten?

Dim input As String = "RECOMMENDED AND THE END OF A STRING END" 
Dim res() As String = input.Split(New String() {" END "}, StringSplitOptions.None) 

'Output: 
'---------------------------- 
'res = {Length=2} 
'(0) = "RECOMMENDED AND THE" 
'(1) = "OF A STRING END" 

Die Spaltung nicht mit diesem Code funktioniert nur das Wort END ist ein einzelne Wort mit umgebenen Raum. Aber das Wort durch ein anderes Zeichen umgeben sein oder den Anfang oder das Ende eines Strings sein könnte:

  • END TEST - funktioniert nicht
  • TEST END - nicht
  • funktioniert
  • TEST END, HELLO WORLD - funktioniert nicht
  • ...
Verwandte Themen