去掉[]中的英文字符

有一个字符串,里面是中文与英文的混排内容,中间包含几对中括号(方括号),现在有个需求,就是移除中括号中所有的英文字符,保留其他数据.

例1:

string str = "abc[你abc好]abc";

现在要将字符串里面的“[你abc好]”中的英文字符“abc”去掉,使得字符串变为

1 string str = "abc[你好]abc";

显然使用正则表达式可以是

1 string str = Regex.Replace(str, @"(\[你)[a-zA-Z]+(好\])", "$1$2");

汉字两边型
由于问题是要将方括号内的英文字母去掉,所以无论方法括号内两端是什么,都可以使用C#语句:

1 string str = Regex.Replace(str, @"(\[)[a-zA-Z]*(.+?)[a-zA-Z]*(\])", "$1$2$3");

整合结果

  通过前面的分析,想要将中括号里面的英文去掉,可采用的通用思维为
-> 先去掉中括号内首尾英文字母
-> 在利用循环,从左往右依次去掉一组组英文字符,直到英文字符为止

  结合前面的讨论,给出一个方法

 

    
    
    
    
  1. public static string MyReplace(string str) 
  2.  {  
  3.      str = Regex.Replace(str, @"(\[)[a-zA-Z]*(.+?)[a-zA-Z]*(\])""$1$2$3"); 
  4.      while (Regex.IsMatch(str, @"\[[^\]]+?[a-zA-Z]+[^]]+\]")) 
  5.      { 
  6.          str = Regex.Replace(str, @"(\[[^\]]+?)[a-zA-Z]+([^\]]+\])""$1$2"); 
  7.      } 
  8.      return str; 
  9.  } 
 
  
 
 

 

 

你可能感兴趣的:(正则表达式,字符串,职场,休闲)