我在此方法RegexReplace
中有一个Regex.Replace,用于
Globals.ThisAddIn.Application.ActiveDocument.Range().Text =
Globals.ThisAddIn.Application.ActiveDocument.Range().Text.RegexReplace()
但是,正如您可能想象的那样,因为我直接处理Text,控制字符会被破坏。
有没有什么好方法可以解决这个问题?
编辑:我知道这个词有本地查找和替换(https://msdn.microsoft.com/en-us/library/f1f367bx.aspx?f=255&MSPPError=-2147217396),但是,我正在寻找积极向前看的能力。所以这条路线不是最优的(如果我只是不知道如何做通配符正向前瞻,我想知道如何)
使用正则表达式的正向前瞻示例如下。
public static string RegexReplace(this string input)
{
var goalRegEx = new Regex(@"(" + UnicodeLeftSingleQuotation + @"(?=\d{3}(\.|,|\s){1}))");
// positive lookahead. limits to 3 digits.
//no more no less. but not inclusive
// word has find and replace feature that allows to use wildcard using
//--- ‘[0-9]{3}[^11-^14^t.^s]{1} ---
//however they do not have ability to do positive lookahead.
return goalRegEx.Replace(input, UnicodeRightSingleQuotation);
}
在上面的代码(?=\d{3}(\.|,|\s){1})
表示我想找到3位数后跟空格或逗号或句点但不包括在搜索结果中(所以在这种情况下我试图只替换左单引号
EDIT2:
所以在了解了表达能力后,我尝试使用它来查找和替换使用Word本机查找和替换(快捷键Ctrl + H)和表达式"‘([0-9]{3}>)"
。但是,下面的代码似乎没有像我预期的那样工作。
With find
.ClearFormatting()
.Text = "‘([0-9]{3}>)"
.Replacement.ClearFormatting()
.Replacement.Text = "’\1"
.Execute(Replace:=WdReplace.wdReplaceAll, MatchWildcards:=True)
End With
我将它应用于字符串并且没有运气
‘123 Video provides a powerful way to help you prove your point.
This line contains a patent quote '123 abbreviation that does not need to be changed. It uses a straight quote.
This line contains a properly formatted patent quote abbreviation ’123. This is what we want to see.
编辑3:似乎AutoFormatAsYouTypeReplaceQuotes和AutoFormatReplaceQuotes必须设置为False才能使用Find进行更新。