【发布时间】:2018-11-09 08:58:06
【问题描述】:
我正在处理文件,以便将预定义关键字列表替换为前后字符串(例如“#”和“.”),如下所示:
“Word Word2 anotherWord and some other stuff”应该变成“#Word.#Word2.#anotherWord.and some other stuff”
我的键是唯一的,并且从最长的键到最小的键都被处理过,所以我知道包含只能是已经存在的
但是,如果我有密钥包含(例如 Word2 包含 Word),并且如果我这样做了
"Word Word2 anotherWord and some other stuff"
.Replace("anotherWord", "#anotherWord.")
.Replace("Word2", "#Word2.")
.Replace("Word", "#Word.")
我得到以下结果:
“#Word.##Word.2.#another#Word.. 以及其他一些东西”
可以肯定的是,我的方法并不可行。那么有什么方法可以确保我只替换字符串中的一个键,如果它不包含在另一个键中?我尝试了 RegExp,但没有找到正确的方法。还是有其他解决方案?
【问题讨论】:
-
选择标签时请注意,不要选错了。
-
请用正确的语言标记您的问题
-
这不是字符串替换的工作方式。您可能想用另一个临时字符串替换搜索字符串,然后在所有搜索完成后再次替换所有内容。
-
假设您有
.Replace("bob", "#bob").Replace("cat", "#cat"),如果输入为bobcat cat bob cabobt bocatb,您希望得到什么结果? -
@ScottHannen:这不是一个现实的解决方案。完成了一半的工作并声称不应该完成其余的工作与完成所需的工作不同。对于示例代码,可以有效地删除“Word2”替换,因为“Word”替换也会命中“Word2”,但如果使用不同的替换值(例如用“#Word”替换“Word”但用“@Word2”替换“Word2”)。