C# 正则表达式精确匹配字符串中的11位电话号码,并在c中删除匹配中的连字符(-)

C# 正则表达式精确匹配字符串中的11位电话号码,并在c中删除匹配中的连字符(-),c#,.net,regex,winforms,C#,.net,Regex,Winforms,我正在c windows窗体中创建一个文本解析器,我想用-分隔符标识从0开始的11位电话号码,例如0341-2239548或021-34223311应分别使用Regex.Match转换为03412239548和02134223311。我找不到相关的正则表达式,有人能帮我吗 字符串[]RemoveCharacter={\,/=,/,:-,:,;,-} foreach (string word in RemoveCharacter) { s =

我正在c windows窗体中创建一个文本解析器,我想用-分隔符标识从0开始的11位电话号码,例如0341-2239548或021-34223311应分别使用Regex.Match转换为03412239548和02134223311。我找不到相关的正则表达式,有人能帮我吗

字符串[]RemoveCharacter={\,/=,/,:-,:,;,-}

        foreach (string word in RemoveCharacter)
        {
            s = s.Replace(word, " ");
        }

删除这些字符后,电话号码也会用空格分隔,我不希望这种情况只发生在电话号码上。

如果您有这样的字符串,只需删除分隔符即可。您不需要正则表达式:

string nr = "0154-1452146";
nr = nr.Replace("-", "");
Console.WriteLine(nr);

您可以使用下面的正则表达式删除电话号码中的所有连字符和所有其他非数字字符

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);
}

请参见

因此,给定一个以“0”开头并包含10个以上数字和一些可选分隔符的字符串,是否只保留这些数字?为什么你需要一个正则表达式?如果输入字符串包含多个分隔符怎么办?它们会发生在什么位置?如果它根本不包含分隔符怎么办?它能包含空格吗?难道你不想在一个字符串包含那么多的数字时提取11位数字,然后拒绝输入吗?实际上在上一步中,我已经删除了-所以现在数字的前半部分和后半部分之间有空格,我如何连接它们?这个问题是向下投票,原因不止一个。首先,,nocode将是下一个查看请提供一些您已经尝试过的代码Might想先查看一下这里:实际上我有一个完整的字符串,中间没有,我想替换-除了no之间的任何地方。@FatimaKhalid所以基本上您有类似于abc-def-ghi-jkl-0147-852369-mno-pqr-stu的东西,您想要abc def ghi jkl 0147-852369 mno pqr stu或abcdefghijkl0147-852369mnopqrstu?你的问题不清楚。请提供示例。是的,这正是我想要的。这甚至适用于大于10-11位的数字,例如,如果有一个“否”,例如42201-46988-023,我不想删除-,这应该只适用于字符串中的电话号码。确定意味着如果您的字符串包含11位电话号码,然后只替换-?@FatimaKhalid,我更新了我的答案以匹配整个字符串中出现的所有11位电话号码,并将其连字符替换为空字符串。@FatimaKhalid,我使用了正则表达式。您需要的匹配项,也可以查看更新的演示:@FatimaKhalid,如果您要匹配10位或11位,请在上述模式中使用{10,11}。