C# 去掉字母或标记,只留下数字和撇号
案件如下:C# 去掉字母或标记,只留下数字和撇号,c#,.net,asp.net,regex,string,C#,.net,Asp.net,Regex,String,案件如下: 82& 82,9 abse82,9>dpkg 后正则表达式 八十二 82,9 82,9 请帮助我在c上使用Regex做这件事。使用这个模式:\d+(,\d+) \d:匹配0-9之间的数字 +:至少匹配一次模式,因此\d+将至少匹配一个数字 (,\d+):这表示一个组(使用括号),该组与逗号后跟数字匹配,并且可以选择匹配它(由于组末尾的?) 代码段: string[] inputs = { "82&?", "82,9", "abse82,9>dpkg", "f
- 82&李>
- 82,9
- abse82,9>dpkg
- 八十二
- 82,9
- 82,9
请帮助我在c上使用Regex做这件事。使用这个模式:
\d+(,\d+)
:匹配0-9之间的数字\d
:至少匹配一次模式,因此+
将至少匹配一个数字\d+
:这表示一个组(使用括号),该组与逗号后跟数字匹配,并且可以选择匹配它(由于组末尾的(,\d+)
)?
string[] inputs = { "82&?", "82,9", "abse82,9>dpkg", "foobar" };
foreach (var input in inputs)
{
Match m = Regex.Match(input, @"\d+(,\d+)?");
if (m.Success)
{
Console.WriteLine(m.Value);
}
else
{
Console.WriteLine("No match!");
}
}
使用此模式:
\d+(,\d+)
:匹配0-9之间的数字\d
:至少匹配一次模式,因此+
将至少匹配一个数字\d+
:这表示一个组(使用括号),该组与逗号后跟数字匹配,并且可以选择匹配它(由于组末尾的(,\d+)
)?
string[] inputs = { "82&?", "82,9", "abse82,9>dpkg", "foobar" };
foreach (var input in inputs)
{
Match m = Regex.Match(input, @"\d+(,\d+)?");
if (m.Success)
{
Console.WriteLine(m.Value);
}
else
{
Console.WriteLine("No match!");
}
}
如果你只是在寻找那些角色,并试图删除其他任何东西,你可以做以下操作
var strings = new List<string>()
{
"82&?",
"82,9",
"abse82,9>dpkg"
};
var reg = new Regex("[^0-9,]*", RegexOptions.None);
var output = new List<string>();
foreach(var str in strings)
{
output.Add(reg.Replace(str, ""));
}
var strings=新列表()
{
"82&?",
"82,9",
“abse82,9>dpkg”
};
var reg=new Regex(“[^0-9,]*”,RegexOptions.None);
var输出=新列表();
foreach(字符串中的var str)
{
输出.添加(寄存器替换(str,“”);
}
如果您只是在寻找这些字符并试图删除其他字符,则可以执行以下操作
var strings = new List<string>()
{
"82&?",
"82,9",
"abse82,9>dpkg"
};
var reg = new Regex("[^0-9,]*", RegexOptions.None);
var output = new List<string>();
foreach(var str in strings)
{
output.Add(reg.Replace(str, ""));
}
var strings=新列表()
{
"82&?",
"82,9",
“abse82,9>dpkg”
};
var reg=new Regex(“[^0-9,]*”,RegexOptions.None);
var输出=新列表();
foreach(字符串中的var str)
{
输出.添加(寄存器替换(str,“”);
}
如果您在.NET3.5+上,您可以使用LINQ
。不使用正则表达式(速度更快)的解决方案如下:
var strings = new List<string>() { "82&?", "82,9", "abse82,9>dpkg" };
var result = strings.Select(s =>
String.Join("",
s.Where(c => char.IsNumber(c) || c == ',')
.ToArray()) /* .ToArray() is not needed on .NET 4 */
).ToList();
使用我得到的答案上给出的方法,运行100000次迭代的测试(使用秒表):
Fn: BrunoLM (Method 1)
Ticks: 524999
Fn: BrunoLM (Method 2)
Ticks: 729460
Fn: Ahmad
Ticks: 1323366
Fn: Josh
Ticks: 3783158
使用1000长度的字符串进行相同的测试:
var strings = new List<string>() { "82&?887..2".PadRight(1000, '2'), "82,9".PadRight(1000, '1'), "abse82,9>dpkg".PadRight(1000, 'f') };
进一步阅读:
正则表达式和文本大小n如果您在.NET3.5+上,则可以使用
LINQ
。不使用正则表达式(速度更快)的解决方案如下:
var strings = new List<string>() { "82&?", "82,9", "abse82,9>dpkg" };
var result = strings.Select(s =>
String.Join("",
s.Where(c => char.IsNumber(c) || c == ',')
.ToArray()) /* .ToArray() is not needed on .NET 4 */
).ToList();
使用我得到的答案上给出的方法,运行100000次迭代的测试(使用秒表):
Fn: BrunoLM (Method 1)
Ticks: 524999
Fn: BrunoLM (Method 2)
Ticks: 729460
Fn: Ahmad
Ticks: 1323366
Fn: Josh
Ticks: 3783158
使用1000长度的字符串进行相同的测试:
var strings = new List<string>() { "82&?887..2".PadRight(1000, '2'), "82,9".PadRight(1000, '1'), "abse82,9>dpkg".PadRight(1000, 'f') };
进一步阅读:
正则表达式和文本大小nRegex在搜索更大的字符串时速度更快,但根据我的经验,如果您使用的字符串不超过50个字符,请不要考虑Regex。Regex速度较慢并不意味着这不是一个好的答案。尝试使用“foo,bar”(带逗号)作为您的解决方案或JoshVarga的解决方案的输入。目前,两种解决方案都将返回逗号。不认为这是一场比赛。添加逻辑来处理这种情况,regex很快就占据了IMHO的主导地位。当然OP没有说他有这样的情况,所以这可能不是问题。@Ahmad:谢谢你指出这一点,我想我已经用
方法2
解决了。我没说你的答案不好。我是说Regex在某些情况下是很慢的。如果他的文本有很多字符,那么您的解决方案会比上面显示的快得多。@Kirk:谢谢您的分享。我对1000长度的字符串和Ahmad的正则表达式进行了测试。:)@布鲁诺:我明白,我只是想说速度本身并不总是一个明确的标准,它最终取决于数据(正如你在基准测试中所展示的那样)。顺便说一句,我只是在猜测OP真正想要什么。关于“foo,bar”的例子,我不知道它是否扩展到“8,a”。在这种情况下,OP可能需要“8”,或者他们可能只需要逗号后面出现一个数字(正如您所看到的那样)。OP需要澄清。我不是想让你用我的评论编写OP没有要求的代码!搜索更大的字符串时,Regex会更快,但根据我的经验,如果您不使用超过50个字符的字符串,请不要考虑Regex。Regex速度较慢并不意味着这不是一个好的答案。尝试使用“foo,bar”(带逗号)作为您的解决方案或JoshVarga的解决方案的输入。目前,两种解决方案都将返回逗号。不认为这是一场比赛。添加逻辑来处理这种情况,regex很快就占据了IMHO的主导地位。当然OP没有说他有这样的情况,所以这可能不是问题。@Ahmad:谢谢你指出这一点,我想我已经用方法2
解决了。我没说你的答案不好。我是说Regex在某些情况下是很慢的。如果他的文本有很多字符,那么您的解决方案会比上面显示的快得多。@Kirk:谢谢您的分享。我对1000长度的字符串和Ahmad的正则表达式进行了测试。:)@布鲁诺:我明白,我只是想说速度本身并不总是一个明确的标准,它最终取决于数据(正如你在基准测试中所展示的那样)。顺便说一句,我只是在猜测OP真正想要什么。关于“foo,bar”的例子,我不知道它是否扩展到“8,a”。在这种情况下,OP可能需要“8”,或者他们可能只需要逗号后面出现一个数字(正如您所看到的那样)。OP需要澄清。我不是想让你用我的评论编写OP没有要求的代码!