正则表达式字符串,其中空格是可选的,修剪仅遵循(

时间:2016-04-20 15:40:11

标签: c# regex string trim regex-greedy

让我说我有

string abc = "and TRIM$ ( 000trim) and (trim000) and  (abctrim) and Trim(trima) and  TRIM (  abc  ) and trim( A) and 0trim"

我只想将TRIM()函数更改为RTRIM(),并希望模式忽略空格(如果有)并在(之后考虑TRIM

我正在使用

Regex.Replace(abc, "(?i)([^A-Za-z0-9])TRIM([^A-Za-z0-9][(])", "$1RTRIM(");

以上代码的结果是

  

“和 RTRIM((000trim)和(trim000)和(abctrim)和修剪(trimaa)和 RTRIM(abc)修剪(A)和0trim“;

我希望输出为

  

“和 TRIM $ (000trim)和(trim000)和(abctrim)以及 RTRIM (trimaa)和 RTRIM(abc) RTRIM(A)和0trim“;

如何实现所需的输出?

2 个答案:

答案 0 :(得分:1)

使用此:

Regex.Replace(text, @"\bTRIM(?=\s*\()", "RTRIM", RegexOptions.IgnoreCase)

正则表达式匹配trim,其后立即有0个或更多个空格(包括制表符)和左括号(RegexOptions.IgnoreCase不言自明......

编辑:添加(?<![$%]),使其忽略trim,其中包含%$,如下所示:

Regex.Replace(text, @"\b(?<![$%])TRIM(?=\s*\()", "RTRIM", RegexOptions.IgnoreCase)

答案 1 :(得分:0)

你可以这样替换:

var input = @"and TRIM$ ( 000trim) and (trim000) and  (abctrim) and Trim(trima) and  TRIM (  abc  ) and trim( A) and 0trim";
var pattern = @"(?i)\btrim(?:\s+|)(\([^)]+\))";
string res = Regex.Replace(input, pattern, "RTRIM$1");