String 替换字符串中匹配模式的算法
在字符串上实现查找/替换算法的简单方法是什么?我想使用定义替换规则的字典来转换字符串。问题是在每次替换之后,我必须确保后续的替换对原始字符串进行操作。例如: 我的字符串是:ABCABCDEFDEF 我的规则是:ABC->DEF和DEF->XXX 所以我的结果应该是:defxxxxxxString 替换字符串中匹配模式的算法,string,algorithm,string-matching,String,Algorithm,String Matching,在字符串上实现查找/替换算法的简单方法是什么?我想使用定义替换规则的字典来转换字符串。问题是在每次替换之后,我必须确保后续的替换对原始字符串进行操作。例如: 我的字符串是:ABCABCDEFDEF 我的规则是:ABC->DEF和DEF->XXX 所以我的结果应该是:defxxxxxx 而不是XXXXXXXXXX(如果我先应用规则一,然后再应用规则二,这将是结果)。根据您使用的语言,可能会有如此预先设计的函数String.Replace可能会有所帮助。这会节省你很多时间。如果您仍在寻找可以在其他字
而不是XXXXXXXXXX(如果我先应用规则一,然后再应用规则二,这将是结果)。根据您使用的语言,可能会有如此预先设计的函数<如果您使用的是C#,则code>String.Replace可能会有所帮助。这会节省你很多时间。如果您仍在寻找可以在其他字符串中找到模式的算法,那么-算法可能就是您所寻找的 您仍然需要实现后续替换的逻辑,以便对原始字符串进行操作。但这听起来不难做到。简单的方法:
- 从第一个字符开始,尝试每个关键点(如果出现在该位置)
- 如果找到匹配项,请替换并继续替换后的字符
- 否则,请在下一个字符处继续
- 含糊不清:如果同时使用“AB”和“ABC”作为键,则需要决定哪个键应与“ABCD”匹配。通常您希望较长的字符串匹配(否则,它将永远不会匹配)
- Unicode:首先规范化键和原始字符串
改进:
- 不要线性搜索匹配项;相反,使用已排序的键列表并对原始字符串中的字符进行二进制搜索,然后再进行下一次搜索等。实际上,在第一次搜索中只记住找到的匹配项的位置和键,并在第二次搜索中进行替换可能是有益的
- 对于具有许多替换项的大型字符串,通常最好构建一个新字符串
- 用于搜索。这利用了有限的搜索空间(即从关键字列表中获得的知识),以避免探测源字符串的每个字符