2

所以我试图替换一个单词@theplace@theplaces使用正则表达式模式,如:

String Pattern = string.Format(@"\b{0}\b", PlaceName);

但是当我进行替换时,它没有找到模式,我猜这是@问题所在的符号。

有人可以告诉我我需要对 Regex 模式做什么才能使其正常工作吗?

4

3 回答 3

4

以下代码将替换@thepalace@thepalaces的任何实例<replacement>

var result = Regex.Replace(
    "some text with @thepalace or @thepalaces in it."
    + "\r\nHowever, @thepalacefoo and bar@thepalace won't be replaced.", // input
    @"\B@thepalaces?\b", // pattern
    "<replacement>"); // replacement text

使?前面的字符 , 成为s可选的。我正在使用静态Regex.Replace方法。\b匹配单词和非单词字符之间的边界。\B匹配所有\b不匹配的边界。请参阅正则表达式边界

结果

some text with <replacement> or <replacement> in it.
However, @thepalacefoo and bar@thepalace won't be replaced.
于 2013-05-02T14:28:29.753 回答
2

您的问题* 是.\b之前的(单词边界)@。空格和 . 之间没有单词边界@

您可以将其删除,或将其替换为无边界,即大写字母B

string Pattern = string.Format(@"\B{0}\b", PlaceName);

* 假设PlaceName@.

于 2013-05-02T14:36:22.903 回答
0

尝试这个:

string PlaceName="theplace", Replacement ="...";

string Pattern = String.Format(@"@\b{0}\b", PlaceName);
string Result = Regex.Replace(input, Pattern, Replacement);
于 2013-05-02T14:35:05.523 回答