Word 似乎使用与 Visual Studio 不同的撇号字符,并且它导致使用正则表达式出现问题。
我正在尝试使用 OpenXML 在 C# 中编辑一些 Word 文档。我基本上用公司名称替换 [[COMPANY]]。这个过程非常顺利,直到我遇到了名称以 s 结尾的公司的极端情况。我最终遇到了问题 s,有时它会创建 s。
示例: 公司名称: 席梦思 文件中的文本:[[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 实际上会在您键入某些标点符号后对其进行更改,以便为它们提供正确的倾斜度或改进显示效果。
我之前遇到过同样的问题,我使用它作为正则表达式:[\u2018\u2019\u201A\u201b\u2032']
因此,基本上将您的代码修改为:
Regex apostropheReplace = new Regex("s\\[\u2018\u2019\u201A\u201b\u2032']s");
docText = apostropheReplace.Replace(docText, "s\'")
我发现这些是五种最常见的单引号和撇号类型。
如果您遇到双引号相同的问题,可以使用以下方法:[\u201C\u201D\u201E\u201F\u2033\u2036\"]
关于c# - 使用 OpenXML 和 Regex 在 Word Docx 中查找和替换撇号 ( ' ) 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615071/