2017-09-05 4 views
-2

Ich bin für eine einfache/schnelle Möglichkeit suchen, zu identifizieren und zu extrahieren Hashtags aus einem String, und sie vorübergehend getrennt speichern - zB:Finden und Extrahieren Hashtags in Text

Wenn ich die folgende Zeichenfolge:

2017-08-31 Dies ist ein nutzloser Satz, der als Beispiel verwendet wird. #Beispiel #Datum: 2017-09-01 #NothingWow (und dann noch etwas Text für gutes Maß).

Dann möchte ich in der Lage sein, dies zu erhalten:

#Example 
#Date:2017-09-01 
#NothingWow 

Habe ich es in einem TStringList Speicherung sollte ausreichend sein, bis ich fertig bin. Ich muss sie nur außerhalb der ursprünglichen Zeichenfolge speichern, um die Querverweise zu vereinfachen. Wenn sich die ursprüngliche Zeichenfolge ändert, fügen Sie sie am Ende wieder hinzu. (aber das ist einfach - es ist das Extraktionsteil Ich habe Probleme mit)

Es befindet sich auf der # und Ende/Pause beginnen sollte, wenn es ein [Leerzeichen] trifft.

Die Art, wie ich ursprünglich geplant, es Boolesche Flags zu verwenden war (auf False vorbelegt), dann für die verschiedenen Hashtags überprüfen, so dass sie auf true gesetzt, wenn gefunden, und extrahieren alles nach einem [:] getrennt. (aber ich bin sicher, es gibt einen besseren Weg, es zu tun)

Jede Beratung wird sehr geschätzt.

+2

den String Zeichen für Zeichen parsen. Wenn Sie auf ein '#' stoßen, notieren Sie sich die Position. Wenn Sie auf Leerzeichen oder das Ende der Zeichenfolge stoßen, fügen Sie das Hash-Tag zu Ihrer Liste hinzu. Wenn noch mehr Zeichenfolge übrig ist, fahren Sie wie zuvor fort. –

Antwort

3

Die folgende Abbildung zeigt eine einfache Konsolenanwendung, die Sie als Basis für eine Lösung verwenden können: . Es funktioniert, weil das Zuweisen Ihrer Eingabezeichenfolge zu der DelimitedText-Eigenschaft eines StringList das StringList veranlasst, den Eingang in einer Reihe von räumlich begrenzten Zeilen zu analysieren. Es ist dann eine einfache Sache, nach denen zu suchen, die mit einem # beginnen.

Der Code ist als eine Delphi-Konsole-Anwendung geschrieben, sollte aber zu Lazarus/FPC konvertieren trivial sein.

Code:

program HashTags; 

{$APPTYPE CONSOLE} 

uses 
    Classes, SysUtils; 

procedure TestHashTags; 
var 
    TL : TStringList; 
    S : String; 
    i : Integer; 
begin 
    TL := TStringList.Create; 
    try 
    S := '2017-08-31 This is a useless sentence being used as an example. #Example #Date:2017-09-01 #NothingWow (and then some more text for good measure)'; 
    TL.DelimitedText := S; 
    for i := 0 to TL.Count - 1 do begin 
    if Pos('#', TL[i]) = 1 then 
     writeln(i, ' ', TL[i]); 
    end; 
    finally 
    TL.Free; 
    end; 
    readln; 
end; 

begin 
    TestHashTags; 
end. 
+1

'TL: = TStringList.Create; versuchen Sie .. – Sami

+0

@Sami: Danke für die Entdeckung. Es war ein bisschen fehlerhafte Bearbeitung. – MartynA

+0

Ich sehe, was Sie getan haben ... Ich brauche nur zwei _StringLists_ - zuerst, um den Text mit zu begrenzen, und die zweite, um die tatsächlichen Ergebnisse zu halten - danke. – Marius

Verwandte Themen