在文本中查找和提取主题标签
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,然后提取任何内容一个 [:] 分开。
(但我确信有更好的方法)
任何建议将不胜感激。
下面显示了一个简单的控制台应用程序,您可以将其用作基础
寻求解决方案。它之所以有效,是因为将您的输入字符串分配给 StringList
的 DelimitedText
属性 会导致 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.
我正在寻找一种 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,然后提取任何内容一个 [:] 分开。 (但我确信有更好的方法)
任何建议将不胜感激。
下面显示了一个简单的控制台应用程序,您可以将其用作基础
寻求解决方案。它之所以有效,是因为将您的输入字符串分配给 StringList
的 DelimitedText
属性 会导致 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.