在文本中查找和提取主题标签

Find & Extract hashtags in text

我正在寻找一种 easy/quick 方法来从字符串中识别和提取主题标签,并暂时单独存储它们 - 例如:

如果我有以下字符串:

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).

那么我希望能够得到这个:

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

我想在我完成之前将它存储在 TStringList 中应该足够了。我只需要将它们存储在原始字符串之外以便于交叉引用,然后如果原始字符串发生变化,将它们添加回末尾。 (但这很简单 - 它是我遇到问题的提取部分

遇到[space].

应该从#开始,end/break

我最初计划的方式是使用布尔标志(默认为 False),然后检查不同的主题标签,如果找到则将它们设置为 true,然后提取任何内容一个 [:] 分开。 (但我确信有更好的方法

任何建议将不胜感激。

下面显示了一个简单的控制台应用程序,您可以将其用作基础 寻求解决方案。它之所以有效,是因为将您的输入字符串分配给 StringListDelimitedText 属性 会导致 StringList 将输入解析为一系列 space-limited 行。然后查找以 #.

开头的那些就很简单了

代码是作为 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.