使用替换时正则表达式删除空格

时间:2014-10-15 17:45:29

标签: c# regex

我的情况不是要删除空格,而是保留它们。我有这个字符串>[database values],我想找到它。我创建了此RegEx以找到它然后进入并删除>, [, ]。下面的代码采用来自文档的字符串。第一个模式查找被>[some stuff]包围的任何内容然后进入并“移除”>, [, ]

  string decoded = "document in string format";
  string pattern = @">\[[A-z, /, \s]*\]";
  string pattern2 = @"[>, \[, \]]"; 
  Regex rgx = new Regex(pattern);
  Regex rgx2 = new Regex(pattern2);         
  foreach (Match match in rgx.Matches(decoded))
  {                     
    string replacedValue= rgx2.Replace(match.Value, "");
    Console.WriteLine(match.Value);
    Console.WriteLine(replacedValue);

我首先得到的Console.WriteLine是正确的。所以我会得到像>[123 sesame St]这样的东西。但我的第二个输出显示我的替换不仅删除了字符,还删除了空格,所以我会得到类似这样的123sesameSt。我看不到Regex中有任何空格被替换。我忘记了什么,也许它隐含在替代中?

3 个答案:

答案 0 :(得分:3)

模式中的[A-z, /, \s][>, \[, \]]也在寻找逗号和空格。只需列出字符而不分隔它们,如下所示:[A-Za-z/\s]

string pattern = @">\[[A-Za-z/\s]*\]";
string pattern2 = @"[>,\[\]]";

编辑以包含Casimir的提示。

答案 1 :(得分:1)

通过在[>, \[, \]]中定义pattern2,您可以定义由>,,{{1}等单个字符组成的character group和方括号中列出的每个其他字符。但我想你不想匹配空格[。因此,如果你不想匹配它们就像

一样
,

或者,您可以使用

string pattern2 = @"[>\[\]]";

因此,您可以匹配string pattern2 = @"(>\[|\])"; >[,以更好地表达您的意图。

答案 2 :(得分:1)

在重读了你的问题后(​​如果我理解的话),我意识到你的两步法是无用的。您只需要使用捕获组进行一次替换:

string pattern = @">\[([^]]*)]";
Regex rgx = new Regex(pattern);

string result = rgx.Replace(yourtext, "$1");

模式细节:

>\[         # literals: >[
(           # open the capture group 1
    [^]]*   # all that is not a ]
)           # close the capture group 1
]           # literal ]

替换字符串是指具有$1

的捕获组1