在正则表达式的任何地方允许换行?

时间:2011-06-26 01:14:39

标签: c# .net regex

我在一堆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

3 个答案:

答案 0 :(得分:1)

除非有人能够使用正则表达式的一些工具提供更好的答案,否则我不知道我能够通过将捕获组的searach更改为

来解决此问题
(\\.*?)?([\w\[\]]+)(\s+\w+)?(\s*\\.*?)

我现在只需要使用四个捕获而不是一个(这也给了我一组两个实际打印文本的捕获组,无论如何我以后都需要。

答案 1 :(得分:0)

也许你可以在运行剩余的处理逻辑之前尝试Regex.Replace(yourString, "[\r\n]*", "")

答案 2 :(得分:-1)

我认为你应该使用\s+代替。

编辑:如果您想用一个空格替换所有换行符(以及其他奇怪的空格),请在执行其他匹配之前运行以下内容:

text = Regex.Replace(text, @"\s+", " ");