在单引号之间替换文本

时间:2013-10-30 00:08:17

标签: c# regex

我正在尝试使用FlexCel,C#和Regex替换Excel公式中的某些文本,但是单引号似乎从我用谷歌搜索过程中变得棘手。
字符串是这样的;
"=RIGHT(CELL(\"filename\",'C.Whittaker'!$A$1),LEN(CELL(\"filename\",'C.Whittaker'!$A$1))-FIND(\"]\",CELL(\"filename\",'C.Whittaker'!$A$1)))"

我想用其他名称替换C.Whittaker。它始终是First Initial。姓氏,它总是在单引号内。

我有这个正则表达式匹配; (?:')[^\"]+(?:')
我认为(?:')意味着正则表达式匹配它,但然后忽略它替换,但似乎并非如此。怀疑问题与如何处理字符串有关,但它有点超出我的范围。

3 个答案:

答案 0 :(得分:1)

(?:...)是一个非捕获组;它不会捕获它匹配的东西(也就是说,它不会通过反向引用使字符串的那部分可用),但它确实消耗它。您所考虑的是外观,它们不会消费它们匹配的内容。

(?<=')[^']+(?=')

但你真的需要它们吗?您可能会发现使用引号然后将它们添加到替换字符串更简单。换句话说,将'[^']+'替换为'X.Newname'

答案 1 :(得分:0)

我相信你需要逃避你想让Regex从字面上理解它的角色......

ie:(?:') 变为(?:\')

答案 2 :(得分:0)

你真的需要使用正则表达式吗?正则表达式适用于速度很重要的复杂情况,但它会导致难以维护代码。

请改为尝试:

var formula2 =
    String.Join("'", formula
        .Split(new [] { '\'' })
        .Select((x, n) => n % 2 == 1 ? "new name here" : x));