正则表达式从字符串中精确匹配 11 位电话号码并从 C# 中的匹配中删除连字符(-)
Posted
技术标签:
【中文标题】正则表达式从字符串中精确匹配 11 位电话号码并从 C# 中的匹配中删除连字符(-)【英文标题】:regex to exact match 11 digit phone number from string and remove hyphen(-) from match in c# 【发布时间】:2019-04-17 09:05:34 【问题描述】:我正在 c# windows 窗体中创建一个文本解析器,我想用 - 分隔符识别从 0 开始的 11 位电话号码,例如 0341-2239548 或 021-34223311 应转换为 03412239548和 02134223311 分别使用 Regex.Match。我找不到相关的正则表达式,有人可以帮我吗?
string[] RemoveCharacter = "\"", "(", ")", "/=", "/", ":-", ":", ";", "-" ;
foreach (string word in RemoveCharacter)
s = s.Replace(word, " ");
删除这些字符后,电话号码也用空格分隔,我不希望这种情况只发生在电话号码上。
【问题讨论】:
所以给定一个以 '0' 开头并包含 10 个以上数字和一些分隔符的字符串,您只想保留数字吗?为什么你需要一个正则表达式呢?如果输入字符串包含多个分隔符怎么办?它们会出现在哪些位置?如果它根本不包含分隔符怎么办?它可以包含空格吗?当字符串包含这么多数字时,您不是只想提取 11 位数字,否则拒绝输入吗? 其实在上一步中,我已经把-去掉了,所以现在两部分数字的前半部分和后半部分之间有空格,如何连接它们? 这个问题被否决了,不仅仅是一个原因。首先,this(下一个是 nocode)看看How to Ask 请提供一些您已经尝试过的代码 可能想先看看这里:Regex Tutorials 【参考方案1】:您可以使用下面的正则表达式从电话号码中删除所有连字符和所有其他非数字字符
string pattern = @"\b([\-]?\d[\-]?)11\b";
Regex rgx = new Regex(pattern);
var sentence = "This is phone number 0341-2239548 and 021-34223311";
var matches = rgx.Matches(sentence);
foreach (Match match in matches)
string replacedValue = Regex.Replace(match.Value, @"[^0-9]", "");
sentence = sentence.Replace(match.Value, replacedValue);
查看demo
【讨论】:
这甚至适用于大于 10-11 位的数字,例如,如果没有诸如 42201-46988-023 我不想删除 -,这应该只适用于电话号码一个字符串。 ok 表示如果您的字符串包含 11 位电话号码,然后只替换“-”? @FatimaKhalid,我更新了答案以匹配整个字符串中所有出现的 11 位电话号码,并将其连字符替换为空字符串。 @FatimaKhalid,我使用了您想要的Regex.Matches
,还可以查看更新后的演示:)
@FatimaKhalid,如果您想匹配 10 位或 11 位数字,请在上述模式中使用 10, 11
。【参考方案2】:
如果你有这样的字符串,只需删除你的分隔符。你不需要正则表达式:
string nr = "0154-1452146";
nr = nr.Replace("-", "");
Console.WriteLine(nr);
【讨论】:
实际上我有一个完整的字符串,中间没有,我想在任何地方替换“-”,除了没有之间。 @FatimaKhalid 所以基本上你有这样的东西 "abc-def-ghi-jkl-0147-852369-mno-pqr-stu" 你想要 "abc def ghi jkl 0147-852369 mno pqr stu ”或“abcdefghijkl0147-852369mnopqrstu”?从你的问题中不清楚。请提供示例。 是的,这正是我想要的。以上是关于正则表达式从字符串中精确匹配 11 位电话号码并从 C# 中的匹配中删除连字符(-)的主要内容,如果未能解决你的问题,请参考以下文章