如何改变
XXX@YYY.ZZZ进入XXX_YYY_ZZZ
我知道的一种方法是使用string.replace(char,char)方法,
但我想替换“@”& “”上面的方法只替换了一个char。
如果我有XX.X@YYY.ZZZ ......
,还有一个案例我仍然希望输出看起来像XX.X_YYY_ZZZ
这可能吗?任何建议,谢谢
答案 0 :(得分:8)
因此,如果我理解正确,您希望将@
替换为_
,将.
替换为_
,但仅当.
来在@
之后?如果有保证@
(假设您正在处理电子邮件地址?):
string e = "XX.X@YYY.ZZZ";
e = e.Substring(0, e.IndexOf('@')) + "_" + e.Substring(e.IndexOf('@')+1).Replace('.', '_');
答案 1 :(得分:4)
这是一个完整的正则表达式解决方案,涵盖了您的案例。第二种情况的关键是使用正面的后视来匹配@
符号后面的点。
string[] inputs = { "XXX@YYY.ZZZ", "XX.X@YYY.ZZZ" };
string pattern = @"@|(?<=@.*?)\.";
foreach (var input in inputs)
{
string result = Regex.Replace(input, pattern, "_");
Console.WriteLine("Original: " + input);
Console.WriteLine("Modified: " + result);
Console.WriteLine();
}
虽然这很简单,可以通过几个字符串Replace
调用完成。根据文本大小和代码替换次数,您需要测试效率。
答案 2 :(得分:3)
您可以使用Regex.Replace方法:
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace(v=VS.90).aspx
答案 3 :(得分:3)
您可以使用以下扩展方法进行替换,而不会创建太多临时字符串(如使用Substring和Replace)或产生正则表达式开销。它会跳到@符号,然后遍历剩余的字符以执行替换。
public static string CustomReplace(this string s)
{
var sb = new StringBuilder(s);
for (int i = Math.Max(0, s.IndexOf('@')); i < sb.Length; i++)
if (sb[i] == '@' || sb[i] == '.')
sb[i] = '_';
return sb.ToString();
}
答案 4 :(得分:0)
你可以链替换
var newstring = "XX.X@YYY.ZZZ".Replace("@","_").Replace(".","_");
答案 5 :(得分:0)
创建一个包含您想要替换的字符的数组,循环遍历数组并根据索引进行替换。
答案 6 :(得分:0)
假设数据格式类似于XX.X@YYY.ZZZ,这是String.Split(char seperator)的另一种选择:
string[] tmp = "XX.X@YYY.ZZZ".Split('@');
string newstr = tmp[0] + "_" + tmp[1].Replace(".", "_");