2017-09-05 83 views
-2

我正在尋找一個簡單/快速的方法來從字符串識別和提取主題標籤#標籤提取,並暫時單獨存放 - 例如:查找和文本

如果我有以下字符串:

2017-08-31這是一個無用的句子作爲例子。 #例子#日期:2017-09-01 #NothingWow(然後更多的文字爲好措施)。

然後,我希望能夠得到這個:

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

我想將其存儲在的TStringList應該是足夠的,直到我完成了。我只是需要將它們存儲在原始字符串之外以便於交叉引用,然後如果原始字符串發生更改,請在末尾添加它們。 (但是這很容易 - 它的我遇到麻煩提取部)

應該在#和結尾/休息開始,當它遇到一個[空格]

的方式我最初的計劃是經過使用布爾標誌(默認爲False),然後檢查不同的主題標籤,如果發現他們設置爲true,並提取任何東西[:]分開。 (但我敢肯定有更好的方法做到這一點

任何意見將不勝感激。

+2

解析由字符字符串的字符。當你遇到'#'時,記下這個位置。當您遇到空格或字符串末尾時,將哈希標記添加到列表中。然後,如果還剩下更多的字符串,請像以前一樣繼續。 –

回答

3

下面顯示了一個簡單的控制檯應用程序,您可以使用該控制檯應用程序作爲解決方案的基礎 。它的工作原理是,將輸入字符串分配給StringListDelimitedText屬性會導致StringList將輸入解析爲一系列空間有限的行。那麼尋找那些以#開頭的東西就很簡單了。

該代碼是作爲Delphi控制檯應用程序編寫的,但轉換爲Lazarus/FPC應該是微不足道的。

代碼:

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;嘗試......' – Sami

+0

@Sami:感謝您的發現。這是一個錯誤的編輯。 – MartynA

+0

我看到你做了什麼...我只需要兩個_StringLists_ - 第一個用於分隔文本,第二個用於保存實際結果 - 謝謝。 – Marius