关于c#:在单引号之间替换文本

Replacing text between single quotes

我试图用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。它总是第一个首字母。姓氏和它总是在单引号内。

我有一个匹配的regex;(?:')[^\"]+(?:')。我认为(?:')意味着regex匹配它,但随后忽略了它作为替换,但似乎情况并非如此。怀疑问题在于如何处理字符串,但这有点超出我的理解范围。


(?:...)是一个非捕获组;它不捕获它匹配的内容(也就是说,它不使字符串的该部分在以后通过后向引用可用),但它确实使用它。你所想的是寻找,它不会消耗它们匹配的东西。

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

但你真的需要它们吗?您可能会发现使用引号并将其添加到替换字符串中更简单。换言之,用'X.Newname'替换'[^']+'


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

试试这个:

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


我相信你需要逃离你的角色,你想让雷杰克斯从字面上理解它…

即:(?:')。变成(?:\')