gpt4 book ai didi

c# - 查找字符串中最长的数字序列

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

我正在尝试清除质量较差的 OCR 读取的结果,尝试删除我可以安全地认为是错误的所有内容。

所需的结果是一个 6 位数字字符串,因此我可以从结果中排除任何不是数字的字符。我也知道这些数字是按顺序出现的,所以任何乱序的数字也很可能是不正确的。

(是的,修复质量是最好的,但不行......他们不会/不能更改他们的文档)

我立即 Trim() 删除空格,因为这些最终会成为文件名,所以我也删除了所有非法字符。

我已经找出哪些字符是数字,并将它们添加到字典中,并与它们所在的数组位置相对应。这让我清楚地看到了数字序列,但我正在努力寻找如何让我的程序识别这一点的逻辑。

使用字符串“Oct', 2$3622”进行测试(实际错误读取)理想的输出是“3662Obvious to Humans

    public String FindLongest(string OcrText)
{
try
{
Char[] text = OcrText.ToCharArray();
List<char> numbers = new List<char>();

Dictionary<int, char> consec = new Dictionary<int, char>();

for (int a = 0; a < text.Length; a++)
{
if (Char.IsDigit(text[a]))
{
consec.Add(a, text[a]);

// Won't allow duplicates?
//consec.Add(text[a].ToString(), true);
}
}

foreach (var item in consec.Keys)
{
#region Idea that didn't work
// Combine values with consecutive keys into new list
// With most consecutive?
for (int i = 0; i < consec.Count; i++)
{
// if index key doesn't match loop, value was not consecutive
// Ah... falsely assuming it will start at 1. Won't work.
if (item == i)
numbers.Add(consec[item]);
else
numbers.Add(Convert.ToChar("#")); //string split value
}
#endregion
}

return null;
}
catch (Exception ex)
{
string message;

if (ex.InnerException != null)
message =
"Exception: " + ex.Message +
"\r\n" +
"Inner: " + ex.InnerException.Message;
else
message = "Exception: " + ex.Message;
MessageBox.Show(message);

return null;
}
}

最佳答案

获取最长数字序列的一种快速而肮脏的方法是使用如下正则表达式:

var t = "sfas234sdfsdf55323sdfasdf23";

var longest = Regex.Matches(t, @"\d+").Cast<Match>().OrderByDescending(m => m.Length).First();

Console.WriteLine(longest);

这实际上会获取所有序列,显然您可以使用 LINQ 来选择其中最长的序列。

这不处理相同长度的多个序列。

关于c# - 查找字符串中最长的数字序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12976860/

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