【发布时间】:2015-10-08 23:05:23
【问题描述】:
给定一个包含术语 A 和 B 的字符串 M,我想将每个 A 替换为B 和 A 的每个 B 到 M'。天真地尝试将 A 替换为 B,然后将 B 替换为 A 但在这种情况下 M' 仅包含 A。我可以考虑替换条款并记录它们的位置,以免条款再次被替换。当我们只有 A 和 B 要替换时,这很有效。但是,如果我们需要替换超过 2 个术语并且它们的长度不同,那么它就会变得棘手。
所以我想这样做:
- 我们得到 M 作为输入字符串,R = [(x1, y1), (x2, y2), ... (xn, yn)] 作为要替换的术语,我们替换xi 代表 yi 代表所有 i。
- 使用 M,将 L = [(M, false)] 初始化为 (string * boolean) 元组的列表,其中 false 表示该字符串未被替换。
- 搜索 L 的每个成员 L(i) 中出现的 xi,第二项为 false。将 L(i) 划分为 [(pre, false), (xi, false), (post, false)],并映射到 [(pre, false), (yi, true), (post, false)] 其中 pre和 post 是 xi 前后的字符串。展平 L。
- 重复上述操作,直到 R 用尽。
- 将 L 的每个元组的第一个元素连接到 M'。
有没有更有效的方法?
【问题讨论】:
-
@Amit 你能写一个例子作为答案吗?
-
你自己试试吧。正则表达式功能强大,但您需要自己了解它的工作原理才能知道何时使用它。
-
我认为我的问题只是stackoverflow.com/questions/15604140/…的一个更狭窄的案例