【发布时间】:2018-03-19 11:00:14
【问题描述】:
我正在使用 C# 并希望从字符串中解析电话号码。我住在瑞士,电话号码可以有 10 位数字,如下所示:
000 000 00 00 或可以以+41 开头:+41 00 000 00 00。我写了以下正则表达式:
var phone = new Regex(@"\b(\+41\s\d{2}|\d{3})\s?\d{3}\s?\d{2}\s?\d{2}\b");
这在第一个示例中非常有效,但带有“+41”的示例不匹配。我很确定单词边界\b 和以下+ 存在问题。当我在开始时删除\b 时,它会发现与+41-example 匹配。我的代码:
var phone = new Regex(@"\b(\+41\s\d{2}|\d{3})\s?\d{3}\s?\d{2}\s?\d{2}\b");
var text = @"My first phonenumber is: +41 00 000 00 00. My second one is:
000 000 00 00. End.";
var phoneMatches = phone.Matches(text);
foreach(var match in phoneMatches)
{
Console.WriteLine(match);
}
Console.ReadKey();
输出:000 000 00 00。
没有\b的输出:
+41 00 000 00 00
000 000 00 00
有什么解决办法吗?
【问题讨论】:
-
如果下一个预期的字符可以是非单词字符,请不要使用
\b。使用(?<!\w) -
@WiktorStribiżew 成功了,谢谢。我从未在正则表达式中见过
(?和<!......你能解释一下这些是什么意思吗?我在网上找不到任何参考资料。
标签: c# .net regex phone-number word-boundary