gpt4 book ai didi

c# - 删除字母或标记出来只留下数字和撇号

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:37 24 4
gpt4 key购买 nike

案例如下;

  • 82&?
  • 82,9
  • abse82,9>dpkg

在正则表达式之后

  • 82
  • 82,9
  • 82,9

请帮助我使用正则表达式在 C# 上完成

最佳答案

如果您使用的是 .NET3.5+,则可以使用 LINQ。没有 Regex 的解决方案(速度更快)如下:

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

它只选择数字或逗号字符。但是给定字符串 8,1aa1 它将返回 8,11

另一种方法有点慢,但它会从 8,1aa1 中获取 8,1 而不会获取 8,aa,a:

var strings = new List<string>() { "82&?887..2", "82,9", "abse82,9>dpkg" };
var result = strings.Select(s =>
String.Join("",
s.SkipWhile(c => !char.IsNumber(c))
.TakeWhile(c => (char.IsNumber(c) || c == ','))
.ToArray()
)
).Where(s => char.IsNumber(s.LastOrDefault())).ToList();

使用我得到的答案中提供的方法运行 100,000 次迭代的测试(使用秒表):

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

结果:

Fn: Ahmad
Ticks: 11911332

Fn: BrunoLM (Method 2)
Ticks: 28149495

Fn: Josh
Ticks: 213681541

进一步阅读:

regex正则表达式和文本大小n

关于c# - 删除字母或标记出来只留下数字和撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com