用自定义处理替换另一个字符串中出现的一个字符串

月山月井

假设我有一个字符串

myString := 'aa12bb23cc34dd'

我想用数字的值乘以2来代替每次出现的数字(我的实际应用会更复杂,这是示例):

myUpdatedString := 'aa24bb46cc68dd'

我知道Regexpr的ReplaceRegExpr可以像Sed一样使用,但它不将函数作为要应用于匹配元素的参数。

目前,我正在做这样的事情(可能有点难看/无效,但是重要的是做事的方式):

program Project1;

uses
  SysUtils, RegExpr;

// The function I would like to call on my matched element
function foo(const x: integer): integer;
begin
  result = x * 2;
end;

function bar(const base, s: string): string;
var
  pos: integer;
  s2: string;
begin
  // Application of foo
  s2 := foo(StrToInt(s)).ToString;
  // Substitution of the matched string
  result = StringReplace(base, s, s2);
end;

var
  re: TRegExpr;
  myString, myUpdatedString: string;
begin
  myString := 'aa12bb23cc34dd';
  re := TRegExpr.Create('[0-9]+');
  if re.Exec(myString) then
  begin
    // For each matched elements
    myUpdatedString := bar(myString , re.Match[1]);
    while re.ExecNext do
    begin
      myUpdatedString := bar(myString , re.Match[1]);
    end;
  end;
  re.Free;
end.

难道没有更轻松或更优雅的方式吗?

像ReplaceRegExpr这样的函数将函数作为参数应用到匹配的元素将是最好的,但我找不到任何函数。

感谢您的帮助!

编辑:在我的实际应用中,我不需要替换数字,而是替换HTML流的各种标记中的属性值。我想从各种标签中修改各种元素,这些值需要大量计算才能知道用什么替换。我认为这对于一个简单的问题来说是很多信息。

阿米哥·杰克(AmigoJack)

TRegExpr已经自带了.Replace(),并.ReplaceEx()给你交出的形式的函数TRegExprWReplaceFunction被调用的每个匹配的次数。在此,您可以确定结果,然后将其用作比赛的替代。这样,您就可以自定义它了。例:

type
  TDum= class  // Must be a function of object, hence a helper class
    class function MyReplace( re: TRegExpr ): String;
  end;

  class function TDum.MyReplace( re: TRegExpr ): String;
  begin
    // Example: convert matching text to number, double it, convert back to text
    result:= IntToStr( StrToInt( re.Match[1] )* 2 );
  end;
...
  myUpdatedString:= re.Replace( 'aa12bb23cc34dd', TDum.MyReplace );
  // Should have become 'aa24bb46cc68dd'

如果你看一下TRegExp的来源,你会看到,这些方法都非常相似,你有什么构造.Exec().ExecNext()了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用嵌套循环在另一个字符串中出现一个字符串

来自分类Dev

如何计算一个字符串在VBA中另一个字符串中出现的次数?

来自分类Dev

如何计算一个字符串元素在ruby的另一个字符串中出现的次数?

来自分类Dev

JAVA:方法,一个字符串在另一个字符串中出现多少次

来自分类Dev

在另一个字符串中查找自定义变量字符串

来自分类Dev

如何从终端用更多文件中的另一个字符串替换一个字符串?

来自分类Dev

CakePHP虚拟字段:用另一个字符串替换

来自分类Dev

计算一个字符串在另一个字符串中每个字符的出现次数

来自分类Dev

用另一个字符串环绕字符串

来自分类Dev

用另一个字符串替换字符串中的字符

来自分类Dev

用另一个字符串替换字符串中的字符?

来自分类Dev

用另一个字符串替换字符串中的字符?

来自分类Dev

无法用另一个字符串替换字符串中的字符

来自分类Dev

如何生成其中出现另一个字符串的字符串列表

来自分类Dev

用字符串中的另一个字符替换“字符”

来自分类Dev

Bash用另一个字符串替换空格和字符串结尾

来自分类Dev

用Django模板中的另一个字符串替换字符串

来自分类Dev

Ruby用另一个字符串替换字符串

来自分类Dev

用动态内容中的另一个字符串替换子字符串

来自分类Dev

用另一个字符串替换文件中的字符串

来自分类Dev

Python用另一个字符串替换字符串(大写或小写)

来自分类Dev

汇编:用另一个字符串替换子字符串

来自分类Dev

Linux用另一个字符串替换字符串

来自分类Dev

用另一个字符串替换字符串中的单词 - Javascript

来自分类Dev

sed 用另一个字符串替换字符串错误结果

来自分类Dev

用不包括模式的另一个字符串替换字符串中的一个字符

来自分类Dev

grep:如果另一个字符串没有出现,则计算一个字符串出现的次数

来自分类Dev

替换一个字符串,并用另一个字符串创建一列

来自分类Dev

如何从另一个字符串替换一个字符串?

Related 相关文章

  1. 1

    使用嵌套循环在另一个字符串中出现一个字符串

  2. 2

    如何计算一个字符串在VBA中另一个字符串中出现的次数?

  3. 3

    如何计算一个字符串元素在ruby的另一个字符串中出现的次数?

  4. 4

    JAVA:方法,一个字符串在另一个字符串中出现多少次

  5. 5

    在另一个字符串中查找自定义变量字符串

  6. 6

    如何从终端用更多文件中的另一个字符串替换一个字符串?

  7. 7

    CakePHP虚拟字段:用另一个字符串替换

  8. 8

    计算一个字符串在另一个字符串中每个字符的出现次数

  9. 9

    用另一个字符串环绕字符串

  10. 10

    用另一个字符串替换字符串中的字符

  11. 11

    用另一个字符串替换字符串中的字符?

  12. 12

    用另一个字符串替换字符串中的字符?

  13. 13

    无法用另一个字符串替换字符串中的字符

  14. 14

    如何生成其中出现另一个字符串的字符串列表

  15. 15

    用字符串中的另一个字符替换“字符”

  16. 16

    Bash用另一个字符串替换空格和字符串结尾

  17. 17

    用Django模板中的另一个字符串替换字符串

  18. 18

    Ruby用另一个字符串替换字符串

  19. 19

    用动态内容中的另一个字符串替换子字符串

  20. 20

    用另一个字符串替换文件中的字符串

  21. 21

    Python用另一个字符串替换字符串(大写或小写)

  22. 22

    汇编:用另一个字符串替换子字符串

  23. 23

    Linux用另一个字符串替换字符串

  24. 24

    用另一个字符串替换字符串中的单词 - Javascript

  25. 25

    sed 用另一个字符串替换字符串错误结果

  26. 26

    用不包括模式的另一个字符串替换字符串中的一个字符

  27. 27

    grep:如果另一个字符串没有出现,则计算一个字符串出现的次数

  28. 28

    替换一个字符串,并用另一个字符串创建一列

  29. 29

    如何从另一个字符串替换一个字符串?

热门标签

归档