Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式-查找彩票号码_C#_Regex_Visual Studio - Fatal编程技术网

C# 正则表达式-查找彩票号码

C# 正则表达式-查找彩票号码,c#,regex,visual-studio,C#,Regex,Visual Studio,如果可能的话,我希望得到一些正则表达式的指导,因为我对它们一窍不通: 我已经把彩票扫描成文本,我正试图从返回的文本中提取彩票号码 以下是返回的字符串: "if * it • Including Millionaire Raffle 7618-011874089-204279 111111111111111111111111111111 Goad luck for your draw on Fri 09 Nov 12 Your numbers Lucky Stars A 1 8 22 37

如果可能的话,我希望得到一些正则表达式的指导,因为我对它们一窍不通:

我已经把彩票扫描成文本,我正试图从返回的文本中提取彩票号码

以下是返回的字符串:

"if * it • 
Including Millionaire Raffle
7618-011874089-204279   111111111111111111111111111111
Goad luck for your draw on Fri 09 Nov 12
Your numbers
Lucky Stars
A 1 8 22 37 47 48 - 03 10
B11 15 26 43 44 - 05 06
C 08 23 27 28 29 - 02 09
D06 09 21 26 29 - 01 05
E 06 07 21 22 45 - 04 05
Your raffle numbers) for your draw(s)
PRC690104 
PRC690105 
PRC690106 
PRC690107 
1DRC690108
CHECK YOUR MILLIONAIRE RAFFLE 
RESULTS ONLINE AT 
WWW.NATIONAL-LOTTERY.CO.UK
5 plays x f2.00 for 1 draw = f10.00
HUGE EUROMILLIONS JACKPOTS TO
PLAY FOR EVERY TUESDAY AND
FRIDAY! PLAY TODAY FOR THE
CHANCE TO WIN YOUR WILDEST
DREAMS!
7618-011874089-204279 035469 Term. 26048301
Fill the box to void the ticket
11111111111111111111111 1111111111111111111111111"
这是已扫描的图像:

正如你所看到的,彩票号码似乎总是出现在幸运星和你的彩票之间

有谁能建议如何剔除结果,以便我得到A18223747480310、B11152643440506、C08232728290209、D06092126290105、E06072122450405


任何帮助都将不胜感激

由于结果的前导是0,例如,08代表8,因此简单的方法是每两位数分割一次。不需要正则表达式。

这对正则表达式应该适用于您向我们展示的案例

/// <summary>
///  Regular expression built for C# on: Sun, Aug 25, 2013, 12:55:52 PM
///  Using Expresso Version: 3.0.4334, http://www.ultrapico.com
///  
///  A description of the regular expression:
///  
///  Match expression but don't capture it. [Lucky Stars\r\n]
///      Lucky Stars\r\n
///          Lucky
///          Space
///          Stars
///          Carriage return
///          New line
///  [Numbers]: A named capture group. [.*\r\n], exactly 5 repetitions
///      .*\r\n
///          Any character, any number of repetitions
///          Carriage return
///          New line
///  
///
/// </summary>
public static Regex regex = new Regex(
      "(?:Lucky Stars\\r\\n)(?<Numbers>.*\\r\\n){5}",
    RegexOptions.CultureInvariant
    | RegexOptions.Compiled
    );


public static Regex replaceRegex = new Regex(
      "(\\s-.*\r\n)",
    RegexOptions.CultureInvariant
    | RegexOptions.Compiled
    );
数字检索的代码可以如下所示:

var InputText = @"Lucky Stars
A 1 8 22 37 47 48 - 03 10
B11 15 26 43 44 - 05 06
C 08 23 27 28 29 - 02 09
D06 09 21 26 29 - 01 05
E 06 07 21 22 45 - 04 05
Your raffle numbers";

Match m = regex.Match(InputText);
var numbers = m.Groups["Numbers"].Captures
    .OfType<Capture>()
    .Select(c => replaceRegex.Replace(c.Value, "").Replace(" ", ""));
但我怀疑使用正则表达式是否是最好的解决方案,以防您使用OCR技术从图片中获取文本。

正则表达式和字符串的组合。拆分将更简单、更有效:

Regex reg = new Regex("(?s)(?<=Lucky Stars).+?(?=Your raffle numbers)");
string[] yourNumbers = Regex.Replace(reg.Match("inputString").Value,"[ -]", "")
                            .Split(new char[]{'\n'}, StringSplitOptions.RemoveEmptyEntries);

让我们尽量保持简单:每个彩票号码由字母A到E中的一个组成,后面紧跟着14位数字,每个数字之间可能有多个空格和/或连字符

这里有一个正则表达式来提取每个彩票号码:

[A-E]([\s-]*\d){14}
可视化:来自


然后用空字符串替换所有空格和破折号以获得所需的结果。

文本是作为一个长字符串返回还是作为字符串数组返回?如果是后者,只需寻找上面有星星的线条,然后使用下一个x数量的线条,直到你找到一个写着“你”的线条。即使这是一个有趣的用例,至少从你得到的投票来看,你应该尝试向我们提供你已经尝试过的东西。我投票结束这个问题。@HamZa谢谢。你真慷慨。到目前为止,我已经花了整整一天的时间,昨晚彻夜未眠,试图制定一个策略。我想我可以抓住幸运星和你的抽奖之间的所有东西,但从那里我被难住了。特雷弗,如果你已经在那里了,就在空间上分割,然后使用stringsplitoptions。首先,显示你用来扫描该图像的命令。到目前为止,您只提供了复制该图像的图像。接下来缺少的是到目前为止您所拥有的代码。它也不见了。请创建一个可以重现的示例,以便您的问题能够得到实际回答。策略在很大程度上取决于主题,到目前为止,您仅用文字描述,但在代码中要精确得多。案例中的要点是,每个OCR都有差异,所以构建一个支持孤立案例的正则表达式是-嗯-有限的?是的,我认为这个词是对的。你看过输出了吗?可能会有更多的解释,因为彩票以单间距字体显示数字,因此结果文本表示有时会在不存在的细字符旁边加上额外的空格。@ColinMackay,是的,我有,例如,“a 18 22 37 48-03 10”,修剪所有空格和“-,删除第一个字符。它转到182237480310,然后拆分为18、22、37、47、48、03、10。如果我错了,请纠正我。@TrevorDaniel我没有注意到您的预期结果,只是更新了: