【发布时间】:2020-02-25 03:27:50
【问题描述】:
Word 似乎使用了与 Visual Studio 不同的撇号字符,这导致使用 Regex 时出现问题。
我正在尝试使用 OpenXML 在 C# 中编辑一些 Word 文档。我基本上用公司名称替换 [[COMPANY]]。这一直很顺利,直到我遇到了名称以 s 结尾的公司的极端案例。我最终会遇到问题,有时它会创建一个 s。
示例: 公司名称:西蒙斯 Doc 中的文字:[[COMPANY]] 的业务是汽车。 结果:西蒙斯的生意是汽车。
这是不恰当的英语。
我应该能够像在 [[COMPANY]] 中那样使用基本的查找和替换,但它不起作用。
Regex apostropheReplace = new Regex("s\\'s");
docText = apostropheReplace.Replace(docText, "s\'");
这不是。似乎 Word 使用的字符和撇号(')与我在 Visual Studio 中使用键盘上的键时创建的标准字符不同。如果我使用键盘编写查找和替换,它将不起作用,但如果我从 Word 复制并粘贴撇号,它会起作用。
Regex apostrophyReplace = new Regex("s\\’s");
docText = apostrophyReplace.Replace(docText, "s\'");
注意第二个正则表达式中的不同字符。我对为什么会这样感到困惑,并且还想知道这是否是正确的做法。我尝试了“'”,但这不起作用。我只是想知道使用从 Word 复制的字符是否是正确的方法,是否有办法做到这一点,以便两个字符都可以工作,所以我对可能使用不同的文档创建的文档没有问题程序。
【问题讨论】:
-
有一些类型的引号字符,直引号或智能(弯)引号,就像你发现的那样,这些 ' 和 ' 是其中的一些:'' '' "" “”
-
您收到了两个非常好的答案。我只是想补充一点,Word 使用所谓的印刷引号,也称为“弯引号”。 Visual Studio 使用所谓的“打字机引号”或“直引号”。如答案中所述,这些是不同的 Unicode 字符,这意味着当您只提供直引号时,您的正则表达式与大引号不匹配。