我需要包围所有'&'用' |'在一个字符串中但只有在没有' |'那里 例如。以下字符串( - >预期结果):
我想出了选择器(至少我认为),它将捕获示例1和4
[^|]&[^|]
但现在我坚持创建替换模式。 我知道我需要在'&'之前和之后复制零件。但是不能让它发挥作用。最接近的结果是
|&|
但这也删除了'&'
之前和之后的字符注意:我无法使用
s.Replace("&", "|&|").Replace("||&", "|&").Replace("&||", "&|");
因为字符串已经包含" ||&"在开始时,无论如何都不会产生预期的结果。
欢迎使用正则表达式的任何替代方案!
答案 0 :(得分:4)
你需要使用负向前瞻和后视:
(?<!\|)&(?!\|)
答案 1 :(得分:3)
这应该适用于您的示例:
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();
}
答案 2 :(得分:1)
搜索\|?&\|?
并替换为|&|
的正则表达式将是一种简单的方法。这适用于行的开头和结尾以及行内部。
该表达式在|
之前和之后查找零个或一个&
个字符,并替换所有四个变体(即&
,|&
,|&|
和&|
)以及所需的文字。该表达式不会在现有|
字符正确时单独保留。