【问题标题】:how do i extract first string from specific text如何从特定文本中提取第一个字符串
【发布时间】:2015-04-21 06:43:00
【问题描述】:

我需要从文本中提取字符串,如下例所示

Hi i have no name <z>empty</z>

我只想将&lt;z&gt; 之前的文本提取到数组或字符串中,即hi i have no name 我试过这个功能

procedure Split (const Delimiter: Char; Input: string; const Strings: TStrings);
begin
   Assert(Assigned(Strings)) ;
   Strings.Clear;
   Strings.StrictDelimiter := true;
   Strings.Delimiter := Delimiter;
   Strings.DelimitedText := Input;
end;

但它只能拆分 ;,: 等字符。我想用这个特定的字符串 &lt;z&gt; 开始拆分

【问题讨论】:

  • 如果&lt;z&gt; 是sep,那么empty&lt;/z&gt; 是第二个字符串,对。或者你需要一个 XML 解析器。
  • 我想在&lt;z&gt; 之前读取字符串,有点像string := Copy(Hi i have no name &lt;z&gt;empty&lt;/z&gt;, 1, Pos('&lt;z&gt;', Hi i have no name &lt;z&gt;empty&lt;/z&gt;)-1);
  • s := Copy(s,1,Pos('&lt;z&gt;',s)-1); 你的意思是?
  • 希望你不会那样解析 HTML。

标签: delphi delphi-xe7


【解决方案1】:

当我阅读您所写的内容时,您有一个字符串,并且您想在第一次出现 &lt;z&gt; 之后忽略所有文本。以PosCopy 为例:

P := Pos('<z>', input);
if P = 0 then 
  output := input
else 
  output := Copy(input, 1, P-1);

虽然有些事情告诉我你真的想要一个 XML 解析器。

【讨论】:

  • 这正是我搜索的内容,非常感谢。
【解决方案2】:

只是一个使用字符串辅助例程的例子:

function CutString(const input,pattern: String): String;
var
  p: Integer;
begin
  p := input.IndexOf(pattern);
  if (p >= 0) then
    Result := input.Substring(0,p)
  else
    Result := input;
end;

var
  s: string;
begin
  s := 'Hi i have no name<z>empty</z>';
  s := CutString(s,'<z>');
  WriteLn(s);  // Outputs: 'Hi i have no name'
end.

【讨论】:

    【解决方案3】:

    这是 one-liner-fancrack-nuts-with-sledgehammer-lover正则表达式爱好者的解决方案>,waste-performance-ignorantxml-parser-grump

    TRegEx.Replace('Hi i have no name <z>empty</z>', '((^.*)(?=<z>)|(^.*)(?!<z>)).*', '$1');
    

    【讨论】:

      【解决方案4】:

      如果定界符肯定存在,您可以这样做:

      Result:= Copy(S, 1, Pos(Delimiter, S) - 1);
      

      否则用户 Davids 会回答或这个(较短但性能较差):

      Result:= Copy(S, 1, Pos(Delimiter, S + Delimiter) - 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        相关资源
        最近更新 更多