我想用[city], [cIty], [ciTY], ...
替换[City]
。
我认为正则表达式是一个很好的解决方案,但我并不擅长正则表达式。
尝试代码:
var text = "[City] [CIty] [ciTY] [city] [CITy]";
if (text.Contains("[city]"))
{
//text = text.Replace("[city]", "[City]");
text = Regex.Replace(text, @"[city]", "[City]");
textbox.Text = text;
textbox.SelectionStart = textbox.Text.Length;
textbox.SelectionLength = 0;
}
除输出
[城市] [城市] [城市] [城市] [城市]
那是行不通的,因为regex
语法没有完成
答案 0 :(得分:3)
三点:
要匹配文本中的括号[]
,您需要在正则表达式中将其转义:@"\[city\]"
RegexOptions.IgnoreCase
的选项
对于“包含”,它不使用正则表达式。请改用Regex.IsMatch
。
所以这会将您的代码变成这样的问题:
var text = textbox.Text;
var pattern = @"\[City\]";
// Will match [city], [cITy], [CITY], but not exactly [City]
if (Regex.IsMatch(text, pattern, RegexOptions.IgnoreCase) && !Regex.IsMatch(text, pattern))
{
text = Regex.Replace(text, pattern, "[City]", RegexOptions.IgnoreCase);
// same code after that
}
答案 1 :(得分:2)
您需要转括号,使用Regex.IsMatch
而不是Contains
,并增加模式的大小写。您可以使用正则表达式模式执行此操作,但是C#已构建RegexOptions
,因此您可以IgnoreCase
。可能是这样的:
if(Regex.IsMatch(text, @"\[city\]", RegexOptions.IgnoreCase))
{
text = Regex.Replace(text, @"\[city\]", "[City]", RegexOptions.IgnoreCase);
}
答案 2 :(得分:2)
这里是dotnetfiddle
您需要转义正则表达式中的特殊字符,例如方括号,您可以在下面的模式字符串中看到这些特殊字符。然后,您需要添加正则表达式选项RegexOptions.IgnoreCase以在将字符串与模式字符串进行比较时忽略大小写。
var testText = @"[CIty] [ciTY] [city] [CITy] [City]";
Console.WriteLine("Original text: " + testText);
var pattern = @"\[City\]";
if(Regex.IsMatch(testText, pattern, RegexOptions.IgnoreCase))
{
//use the below updated value as you wish
var updatedStringVal = Regex.Replace(testText, pattern, "[City]", RegexOptions.IgnoreCase);
Console.WriteLine("Updated text: " + updatedStringVal);
}