我在一堆RTF文档中找到了替换,我需要的基本模式是
\{(?:\\\*)?\\field\\fldlock\{\\\*\\fldinst ?MERGEFIELD ?((?:\\.*?)?[\w\[\]]+?)(?:\\.*?)?\}(?:\{\\fldrslt\})?\}
然而我发现在每个斜线之前可能会有一个换行符,所以它转向了这个。
\{(?:\s*\\\*)?\s*\\field\s*\\fldlock\s*\{\s*\\\*\s*\\fldinst\s*MERGEFIELD\s*((?:\\.*?)?[\w\[\]]+?(?:\s*\\.*?)?)?\s*\}(?:\s*\{\s*\\fldrslt\s*\})?\s*\}
然后我点击它失败了
fees totaling $\protect {\field\fldlock{\*\fldinst MERGEFIELD ENTEROUTSTANDINGVETERINARYF
EES}}\plain\f0\fs24\prot
是否必须在搜索中的任何位置匹配新行,而无需在任何地方添加(?:\r?\n)?
?
修改
清除新线路上的混乱。我需要在文档中保留换行符,我只想删除新行,如果它们在我的匹配中,那么在最后的例子中我发布它应该替换
fees totaling $\protect {\field\fldlock{\*\fldinst MERGEFIELD ENTEROUTSTANDINGVETERINARYF
EES}}\plain\f0\fs24\prot
与
fees totaling $\protect ENTEROUTSTANDINGVETERINARYFEES\plain\f0\fs24\prot
答案 0 :(得分:1)
除非有人能够使用正则表达式的一些工具提供更好的答案,否则我不知道我能够通过将捕获组的searach更改为
来解决此问题(\\.*?)?([\w\[\]]+)(\s+\w+)?(\s*\\.*?)
我现在只需要使用四个捕获而不是一个(这也给了我一组两个实际打印文本的捕获组,无论如何我以后都需要。
答案 1 :(得分:0)
也许你可以在运行剩余的处理逻辑之前尝试Regex.Replace(yourString, "[\r\n]*", "")
。
答案 2 :(得分:-1)
我认为你应该使用\s+
代替。
编辑:如果您想用一个空格替换所有换行符(以及其他奇怪的空格),请在执行其他匹配之前运行以下内容:
text = Regex.Replace(text, @"\s+", " ");