c#正则表达式替换为插入
我需要用字符串中的“|”来包围所有的“&”,但前提是那里还没有“|” 例如,以下字符串(->预期结果):c#正则表达式替换为插入,c#,regex,C#,Regex,我需要用字符串中的“|”来包围所有的“&”,但前提是那里还没有“|” 例如,以下字符串(->预期结果): “我和你”->“我和你” “我和你”——不要改变 “我和你”——不要改变 “我和你”->“我和你” 我找到了选择器(至少我认为),它将捕获示例1和4 [^|]&[^|] 但现在我被困在创建替换模式。 我知道我需要在“&”前后复制部件,但无法使其工作。最接近的结果是 |&| 但这也会删除“&”前后的字符 注意:我不能使用 s.Replace("&", "|&
[^|]&[^|]
但现在我被困在创建替换模式。
我知道我需要在“&”前后复制部件,但无法使其工作。最接近的结果是
|&|
但这也会删除“&”前后的字符
注意:我不能使用
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();
}
static void Main(字符串[]args)
{
列表测试=新列表();
测试。添加(“我和你”);
测试。添加(“我和你”);
测试。添加(“我和你”);
测试。添加(“我和你”);
foreach(测试中的var项目)
{
Console.WriteLine(“{0}:{1}”,项,
Regex.Replace(item,@)(?一个正则表达式,用于搜索\\\\\\?&\\\\\?
并替换为\\\\&
,这是一种简单的方法。它在行的开始和结束以及行内工作
表达式在&
前后查找零个或一个
字符,并替换所有四个变体(即&
,&
,&
和&
)使用所需的文本。表达式不会试图在现有的|
字符正确时保留这些字符。它可能会替换字符串的开头和结尾。谢谢,这正是我所需要的。请您解释一下它的工作原理。本页非常好地解释了查找方法:是否需要替换字符串开头/结尾处的(&A)如果没有,请使用捕获组:([^ |]&([^ |]
,并替换为$1 |和|$2
。如果您需要解释,我可以发布我的答案。如果您需要,请告诉我。但问题是“我和你”不应该更改,这会将其更改为“我和你”