2016-07-06 125 views
1

我需要逃避与所有文字单引号字符串,我用下面的正则表达式:如果单引号字符串包含转义的单引号,如何替换字符串?

'[^']*' 

它工作正常,当我已经逃脱了必须更换自己的字符串中的单引号除外。例如,对于以下字符串:

[COMPUTE:{IIF([Client Name] LIKE '%Happy%', 'Happy\'s', 'Other\'s Jr.')}] 

我有这些匹配:

%Happy% 
Happy\ 
, 
s Jr. 

我可以与字符(例如internal_value)的一些其它序列替代\'和比来执行字符串替换,但如果我可以用正则表达式代替它,它会更清晰。

回答

1

你只需要后面负的样子。基本上只是使用任何东西的懒惰匹配.*?然后你可以在结束单引号之前对反斜杠(?<!\\)加负面看。

var reg = new Regex(@"'.*?(?<!\\)'"); 

foreach(Match m in reg.Matches(@"[COMPUTE:{IIF([Client Name] LIKE '%Happy%', 'Happy\'s', 'Other\'s Jr.')}]")) 
    Console.WriteLine(m); 

输出

'%逍遥%'

'快乐\' S'

“其他\的小”

1

您可以使用

'((?:[^'\\]+|\\.)*)' 

修改了一下,从正则表达式的圣经: - 精通正则表达式

regexstorm demo

相关问题