字符串查找/替换算法

syl*_*aar 5 algorithm replace

我希望能够搜索字符串中的各种单词,当我找到一个时,我想将该点的字符串拆分为3个部分(左,匹配,右),匹配的文本将被排除,并且该过程将继续使用左侧+右侧的新字符串.

现在,一旦我完成所有比赛,我需要通过在被删除的位置重新插入匹配的单词(或替换它们)来反转该过程.我在任何搜索中都没有真正找到我想要的东西,所以我想我会在SO上请求输入.

如果这个问题需要进一步说明,请告诉我.

顺便说一句 - 目前,我有一个非常糟糕的算法,用一个唯一的字符串标记替换匹配的文本,然后在所有匹配完成后用适当的匹配替换文本替换标记.

这是目标:

one two three four five six 
Run Code Online (Sandbox Code Playgroud)

匹配"三"替换为foo(记得我们找到了三个,我们找到了它)

one two four five six
       |
     three
Run Code Online (Sandbox Code Playgroud)

匹配"两个四"并防止它被任何东西匹配(为清晰起见编辑)

one five six
   |
 two four 
       |
     three
Run Code Online (Sandbox Code Playgroud)

在这一点上,你不能匹配例如"一二"

所有的比赛都已找到,现在重新安排他们的替补(以相反的顺序)

one two four five six
       |
     three


one two foo four five six
Run Code Online (Sandbox Code Playgroud)

重点是什么?防止一个匹配的替换文本与另一个模式匹配.(对于每个处理的字符串,所有模式都在同一时间运行,并且顺序相同)

我不确定语言是否重要,但我在这种情况下使用的是Lua.

我会尝试改写,我有一个我希望在给定字符串中找到的模式列表,如果我找到一个,我想删除字符串的那部分所以它不匹配其他任何东西,但我想跟踪在哪里我发现它所以我可以在我尝试匹配我的模式列表时插入替换文本

这是一个相关的问题:

Shell脚本 - 使用字符串列表搜索和替换多个文件中的文本

Fra*_*nov 3

你的算法描述不清楚。没有确切的规则应该重新插入提取的令牌。

这是一个例子:

  1. 在“一二三四五六”中查找“三”
  2. 选择这两个之一以获得“foo bar”结果:

    A。将“一二”替换为“foo”,将“四五六”替换为“bar”

    b. 将“一二四五六”替换为“foo bar”

  3. 将“三”插入到步骤 2 生成的字符串“foo bar”中

在第 3 步中,“三”是在“小节”之前还是之后?

一旦您提出了重新插入的明确规则,您就可以轻松地将算法实现为递归方法或具有替换堆栈的迭代方法。