Lazarus 查找&;提取文本中的hashtag

Lazarus 查找&;提取文本中的hashtag,lazarus,freepascal,Lazarus,Freepascal,我正在寻找一种简单/快速的方法来识别和提取字符串中的hashtag,并暂时单独存储它们-例如: 如果我有以下字符串: 2017-08-31这是一个无用的句子,被用作例子#示例#日期:2017-09-01#NothingWow(然后是一些更好的测量文本) 然后我想得到这个: #Example #Date:2017-09-01 #NothingWow 我想在我完成之前,将它存储在TStringList中就足够了。我只需要将它们存储在原始字符串之外,以便于交叉引用,然后如果原始字符串发生更改,请将它

我正在寻找一种简单/快速的方法来识别和提取字符串中的hashtag,并暂时单独存储它们-例如:

如果我有以下字符串:

2017-08-31这是一个无用的句子,被用作例子#示例#日期:2017-09-01#NothingWow(然后是一些更好的测量文本)

然后我想得到这个:

#Example
#Date:2017-09-01
#NothingWow
我想在我完成之前,将它存储在TStringList中就足够了。我只需要将它们存储在原始字符串之外,以便于交叉引用,然后如果原始字符串发生更改,请将它们添加回末尾。 (但这很容易——这是我遇到麻烦的提取部分)

它应该从#开始,在遇到[空格]时结束/中断

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


任何建议都将不胜感激。

下面展示了一个简单的控制台应用程序,您可以将其用作基础 寻找解决办法。这是因为将输入字符串分配给
StringList
DelimitedText
属性会导致
StringList
将输入解析为一系列空间有限的行。然后,寻找以
#
开头的代码就很简单了

代码是作为Delphi控制台应用程序编写的,但是转换为Lazarus/FPC应该很简单

代码:


逐个字符分析字符串。当遇到
#
时,记下位置。当遇到空格或字符串结尾时,请将哈希标记添加到列表中。然后,如果还有更多的字符串,继续像以前一样遍历它。
TL:=TStringList.Create;试试..
@Sami:谢谢你的关注。这是一个有点错误的编辑。我知道你做了什么…我只需要两个字符串列表-第一个用于分隔文本,第二个用于保存实际结果-谢谢。
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.