【问题标题】:Read string to a formatted way using regex and c#使用 regex 和 c# 以格式化方式读取字符串
【发布时间】:2023-04-07 13:36:01
【问题描述】:

我正在使用 c# 捕获大型机屏幕,我必须从屏幕读取文本输入区域对应的标签。目前我正在使用 tesseract ocr 插件从捕获的图像中读取它,它返回一个字符串,我想根据其中的一些字符拆分该字符串。字符如下。

{ '@', '<', '>', '=', '$', '%', '&' }

用于拆分示例字符串如下所示

first name => saran    address @> my address

使用正则表达式将该字符串拆分为数组的任何方式

[0]: "first name"
[1]: "=> saran" 
[2]: "address" 
[3]: "@> my address"

【问题讨论】:

  • 所以你想用“=>”和“@>”分割?
  • @john 不可以。它可以是 { '@', '', '=', '$', '%', '&' }
  • 如果姓名或地址包含这些字符之一怎么办?
  • @john 我正在使用 OCR 从一些图像中读取文本,实际上这是一个好问题,我认为在这种情况下我必须验证最大可能的场景,我认为在这种情况下只有我能做到.
  • saran address,这是怎么拆分的?

标签: c# regex string split


【解决方案1】:

这让你非常接近(但不使用Regex):

char[] splitters = new[] { '@', '<', '>', '=', '$', '%', '&' };

string text = "first name => saran    address @> my address";

string[] results =
    text
        .Aggregate(new List<List<char>>() { new List<char>() }, (a, c) =>
        {
            var l = a.Last();
            if (splitters.Contains(c) && !l.All(x => splitters.Contains(x)))
            {
                l = new List<char>() { c };
                a.Add(l);
            }
            else
            {
                l.Add(c);
            }
            return a;
        })
        .Select(x => new string(x.ToArray()))
        .ToArray();

您的描述中没有关于如何拆分"saran address"。除此之外,这是经过测试并产生的:

名 => 萨兰地址 @> 我的地址

【讨论】:

  • 花哨的 linq,但您意识到只有带有 RemoveEmptyEntries 选项的 String.Split 会给出完全相同的结果,对吧?
  • @Nyerguds - 不,它没有。 OP希望保留拆分字符。它也不会在连续的拆分字符上拆分。
  • 啊,点。认为连续拆分本身与.Split 方法无关紧要。 OP 从未指出这些符号是否有任何意义,也从未明确确认它们需要保留。他自己的拆分示例很狡猾,索引 1 显示为 [1]: =&gt; "saran",而 =&gt; 甚至不在引号内。
  • @Enigmativity。谢谢,实际上我从图像中读取了这个字符串,它返回的字符串如“saran address”。我想将其格式化并将其写入文件。其实我对拆分“saran地址”也有同样的疑问。我想我也可以找到解决方案。
猜你喜欢
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2021-05-09
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多