正则表达式模式忽略空间

时间:2014-05-08 15:16:38

标签: regex vb.net

我正在使用VB.NET regex对象并尝试匹配以下文本:

(99- 13014- 0127)

我希望输出为:99-13014-0127(没有空格和括号)。我还希望匹配的字符串存储在名为“field”的组中,因为它将被自动提取。问题是我不能从结果中排除空格。从理论上讲,根据MSDN,非捕获组“(?:expression)”应该对我有用“非捕获组构造通常在量词应用于组时使用,但由组捕获的子串没有兴趣。“但是,我仍然在结果中得到空格。

以下是我正在使用的模式:

\((?<field>\d{1,6}(?:\s*)-(?:\s*)\d{1,6}(?:\s*)-(?:\s*)\d{1,6})\)

我得到的上述文字和模式的结果是:

99- 13014- 0127

使用的正确表达式是什么让我:99-13014-0127没有空格?

由于

2 个答案:

答案 0 :(得分:1)

“非捕获组”表示此表达式不会出现在组集合中;但这并不意味着结果将从其他封闭组中排除。

相反,请使用lookarounds并对结果应用字符串替换。外观在所需结果的模式之前和之后查找模式。

string result = Regex.Match(input, @"(?<=\()\d{1,6}s*-\s*\d{1,6}\s*-\s*\d{1,6}(?=\))")
                     .Replace(" ","");

正则表达式模式使用模式(?<=prefix)find(?=suffix),其中prefixsuffix是周围的大括号\(\)find是模式为了这个号码。前缀和后缀不包含在结果中。因此,没有必要在命名组中捕获结果。

答案 1 :(得分:0)

我建议你这样做:

var newStr = "match".Replace(" ","");

这将是一个很好的解决方案,因为它不会包含空格,并且使用regex完成 >

的工作。