我的情况不是要删除空格,而是保留它们。我有这个字符串>[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
中有任何空格被替换。我忘记了什么,也许它隐含在替代中?
答案 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