这是一个适合您的工作示例:
class Program
{
static void Main(string[] args)
{
var input = "and x = 'o'reilly' and y = 'o'reilly' and z = 'abc' ";
var output = input
.Select((c, i) => new { Character = c, Index = i })
.Where(o =>
{
if (o.Character != Convert.ToChar("'")) { return false; }
var i = o.Index;
var charBefore = (i == 0) ? false :
char.IsLetter(input[i - 1]);
var charAfter = (i == input.Length - 1) ? false :
char.IsLetter(input[i + 1]);
return charBefore && charAfter;
})
.ToList();
foreach (var item in output)
{
input = input.Remove(item.Index, 1);
input = input.Insert(item.Index, "\"");
}
Console.WriteLine(input);
if (Debugger.IsAttached) { Console.ReadKey(); }
}
}
这输出:
and x = 'o"reilly' and y = 'o"reilly' and z = 'abc'
基本上,它所做的只是获取一个匿名对象列表,为每个字符提供一个索引,过滤那些以'
字母为前缀和后缀的对象,然后根据这些对象的结果通过索引修改输入。