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