c# Regex replace with insert
本文关键字:insert with replace Regex | 更新日期: 2023-09-27 18:19:35
我需要环绕所有'&'字符串中包含"|",但前提是该字符串中还没有"|"例如以下字符串(-->预期结果):
- "我和你"-->"我|和|你"
- "我|&你"-->不更改
- "我和|你"-->不更改
- "我和你"-->"我|和|你"
我找到了选择器(至少我认为),它将赶上示例1和4
[^|]&[^|]
但现在我一直在创建替换模式。我知道我需要一些东西来复制"&但无法使其工作。最接近的结果是
|&|
但这也去除了"&
注意:我不能使用
s.Replace("&", "|&|").Replace("||&", "|&").Replace("&||", "&|");
因为字符串的开头可能已经包含"||&",这无论如何都不会产生预期的结果。
也欢迎任何regex的替代方案!
您需要使用负先行和后向:
(?<!'|)&(?!'|)
这应该适用于您的示例:
static void Main(string[] args)
{
List<string> tests = new List<string>();
tests.Add("Me&You");
tests.Add("Me|&You");
tests.Add("Me&|You");
tests.Add("Me & You");
foreach (var item in tests)
{
Console.WriteLine("{0}: {1}", item,
Regex.Replace(item, @"(?<!'|)&(?!'|)", "|&|"));
}
Console.ReadKey();
}
用正则表达式搜索'|?&'|?
并替换为|&|
是一种简单的方法。这适用于线条的起点和终点以及线条内部。
表达式在&
之前和之后查找零个或一个|
字符,并用所需文本替换所有四个变体(即&
、|&
、|&|
和&|
)。当现有的|
字符正确时,表达式不会尝试将其单独保留。