我正在使用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没有空格?
由于
答案 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)
,其中prefix
和suffix
是周围的大括号\(
和\)
,find
是模式为了这个号码。前缀和后缀不包含在结果中。因此,没有必要在命名组中捕获结果。
答案 1 :(得分:0)
我建议你这样做:
var newStr = "match".Replace(" ","");
这将是一个很好的解决方案,因为它不会包含空格,并且使用regex
完成 >>