我正在尝试从字符串中获取所有电话号码,但我只获得第一次。我无法在这里或其他任何地方找到能解决我问题的任何东西。请看一下我的代码:
List<string> phones = new List<string>();
String test = @"+49 30 12345-67
+49 30 1234567
+49(30)1234567
+49 (30) 12345 - 67
+49-30-1234567
+49 (0)30 12345-67
+49 383 239823
+49 (0)42 3298280
dkfdklfsjd 393292
39239 ";
const string MatchEmailPattern1 = @"(^\+49)([ \-\(]{1,2}[0-9]{1,6}[ \-\)]{1,2})?([0-9 \.\-\/]{3,20})?";
var patterns = new string[] { MatchEmailPattern1 };
Regex r1 = new Regex(string.Join("|", patterns), RegexOptions.Compiled | RegexOptions.IgnoreCase);
MatchCollection matches1 = r1.Matches(test);
StringBuilder sb = new StringBuilder();
foreach (Match match in matches1)
{
StringBuilder ph = new StringBuilder(match.Value);
phones.Add(ph.ToString());
Console.WriteLine(String.Join(",", phones));
}
答案 0 :(得分:3)
您需要删除字符串锚^
的开头。此外,还有一种方法可以删除角色类中的一些冗余转义。
使用
@"(\+49)([- (]{1,2}[0-9]{1,6}[- )]{1,2})?([0-9 ./-]{3,20})?"
请参阅regex demo。
请注意,[- (]
匹配单个字符,-
,空格或(
。无需在字符类的开头(或结尾)转义-
。或者,如果您计划进一步扩展模式,请保持连字符转义以避免在其他开发人员在其之前或之后添加字符时出现问题。