2014-06-13 21 views
0

如果这些格式字符出现在两个引号(")之间,我有一个正则表达式应该替换所有格式字符(\t, \r\, \n, \v, whitespace)和~个字符。在引号内替换所有格式字符

我的代码没有产生所需的结果,取而代之的是用~代替第一个引号,然后将剩下的代替。 我的正则表达式有什么问题,以及我如何才能达到我想要的效果?

对于下面的字符串:name "Right \r\nCurb"
结果应该是:name "Right~~~Curb"
但我的代码是生产:name ~Right \r\nCurb"

我的代码:

const string delimeters = "(\"*[\\t\\r\\n\\v\\b\\s]\")"; 
var openBrkRgx = new Regex(delimeters); 
line = openBrkRgx.Replace(line, "~"); 
+0

你为什么要双转义字符类的项目? –

+0

@AmalMurali在C#中,我认为我必须这样做,因为这些格式字符在2个引用组内(嵌套两次)。也许我不需要但是?编辑:刚刚检查,是的C#给出了1个转义字符的编译错误。 – Mack

回答

1

使用这种模式[\t\r\n\v\s](?!(([^"]*"){2})*[^"]*$)
和替换与~
Demo

1

以下是两种不同的方法。

  • 1.负先行

    ​​

    :在NET,\s本身的任何Unicode的分离器,标签,换行,回车,垂直制表,换相匹配,下一行

    Live Demo

  • 2.)匹配的报价,然后做你的替代品:(建议 ..)

    Regex.Replace(input, @"""[^""]+""", 
           m => m.Value.Replace(' ', '~') 
              .Replace("\t", "~") 
              .Replace("\r", "~") 
              .Replace("\n", "~") 
          ); 
    

    Live Demo