我正在做一个翻译项目。 我遇到的一个问题是当我试图替换单词特殊字符时。
例如:
[Animal] can be furry.
Dog is an [Animal].
我需要将[Animal]
替换为Animal
。请注意,我只需要替换整个单词。所以结果如下:
Animal can be furry.
Dog is an Animal.
另外,正如我所说,它应该是整个词。所以,如果我有:
[Animal][Animal][Animal] can be furry.
- 结果仍然是
[Animal][Animal][Animal] can be furry.
- 由于[Animal]
与[Animal][Animal][Animal]
样品:
string originalText1 = "[Animal] can be furry";
string badText ="[Animal]";
string goodText = "Animal";
Regex.Replace(originalText1, Regex.Escape(badText), Regex.Escape(goodText));
一切都好。但正如我所说,我需要替换整个词。使用上面的代码,“[Animal]can be furry
”将替换为“Animalcan be furry
”,这是一个否定号。
所以我也试过了:
Regex.Unescape(
Regex.Replace(
Regex.Escape(originalText1),
String.Format(@"\b{0}\b", Regex.Escape(badText)),
Regex.Escape(goodText)))
但仍然无法正常工作。而现在我迷路了。请帮忙。
我还想提一下几乎有类似的帖子,但这个问题并不需要仅替换整个单词。我在网上看了将近3个小时都无济于事。对你的帮助表示感谢。谢谢!
答案 0 :(得分:1)
我还没有测试过,但我会试试这个:
Regex.Replace(orginalText, @"\b\[Animal\]\b", "Animal");
这只会在字边界(\ b)
上匹配[动物]答案 1 :(得分:0)
这对我有用。尝试一下,如果你正在寻找它,请告诉我。
string originalText1 = "[Animal] can be furry";
string badText = @"(?:(?<=^|\s)(?=\S)|(?<=\S|^)(?=\s))" + Regex.Escape("[Animal]") + @"(?:(?<=\S)(?=\s|$)|(?<=\s)(?=\S|$))";
string goodText = "Animal";
string newString = Regex.Replace(originalText1, badText, goodText);
Console.WriteLine(newString);
//"Animal can be furry"
originalText1 = "[Animal]can be furry";
newString = Regex.Replace(originalText1, badText, goodText);
Console.WriteLine(newString);
//"[Animal]can be furry"
找到here。
答案 2 :(得分:0)
我认为这里最简单的方法是使用后视和前瞻来确保括号内的文字是“真正的”匹配。我不确定您的具体要求,但看起来您正在寻找:
[Animal]
)Dog is an [Animal].
第一个很简单:\[Animal\]
。
对于第二个,你可以使用一个后视来确保前面的字符是合适的:
(?<=(^|\s))
,最后一个前瞻:(?=($|\s|\.))
这意味着整个正则表达式将是:
var pattern = @"(?<=^|\s)\[Animal\](?=$|\s|\.)";
var output = Regex.Replace(input, pattern, "Animal");
您可能需要在适当的时候向前瞻/后方添加额外的标点符号。
对于您问题中的示例:
Input: "[Animal] can be furry."
Output: "Animal can be furry."
Input: "Dog is an [Animal]."
Output: "Dog is an Animal."
Input: "[Animal][Animal][Animal] can be furry."
Output: "[Animal][Animal][Animal] can be furry."
Input: "[Animal]can be furry"
Output: "[Animal]can be furry"
答案 3 :(得分:0)
对我而言,这有效:
string s = @"[Animal][Animal][Animal] can be furry. - nothing happened as [Animal] is not the same as [Animal][Animal][Animal]
[Animal] can be furry.
[Animal]
can [Animal]
be furry
my [Animal] is furry";
string mask = "(^|\\s)\\[Animal\\](\\s|$)";
string rep = "$1Animal$2";
string s2 = "";
s2 = Regex.Replace(mask, rep);
/*
s2 = "[Animal][Animal][Animal] can be furry. - nothing happened as Animal is not the same as [Animal][Animal][Animal]
Animal can be furry.
Animal
can Animal
be furry
my Animal is furry" */
您还可以在面具中添加“特殊字符”:
string mask = "(^|\\s|'|\")\\[Animal\\](\\s|$|,|\\?|\\.|!|'|\")";