Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Regex VB Net正则表达式匹配多个_Regex_Vb.net_Multiline - Fatal编程技术网

Regex VB Net正则表达式匹配多个

Regex VB Net正则表达式匹配多个,regex,vb.net,multiline,Regex,Vb.net,Multiline,我正在尝试与RegEx匹配多个要分组在一起的行。以下是我正在搜索的文本示例: Total 2015 DOLLAR AMOUNT Oct-15 DIFF 15-16 Total 2015 COMPANY 1 - WI Nuts $ 59.85 $ 0.00 $ 135.45 $ 0.00 $ 135.45 $0.00 Bolts $ 0.00 $ 0.00 $ 0.00 $ 0.00 $ 0.00 $0.00 Screws $ 449.20 $ 0.00 $ 541.23 $ 0.00 $ 541

我正在尝试与RegEx匹配多个要分组在一起的行。以下是我正在搜索的文本示例:

Total
2015
DOLLAR
AMOUNT
Oct-15 DIFF 15-16
Total
2015
COMPANY 1 - WI
Nuts $ 59.85 $ 0.00 $ 135.45 $ 0.00 $ 135.45 $0.00
Bolts $ 0.00 $ 0.00 $ 0.00 $ 0.00 $ 0.00 $0.00
Screws $ 449.20 $ 0.00 $ 541.23 $ 0.00 $ 541.23 $0.00
Total 7765: $ 509.05 $ 0.00 $ 676.68 $ 0.00 $ 676.68 $0.00
Company 2 - NE
Nuts $ 0.00 $ 0.00 $ 0.00 $ 0.00 $ 0.00 $0.00
Bolts $ 0.00 $ 55.67 $ 542.48 $ 719.82 $(177.34) $777.02
Total 1876: $ 0.00 $ 55.67 $ 2,960.52 $ 4,265.82 $(1,305.30) $5,854.60
Company 3 - MN
Nuts $ 109.52 $ 606.52 $ 858.36 $ 606.52 $ 251.84 $606.52
Paper $ 0.00 $ 0.00 $ 483.82 $ 0.00 $ 483.82 $678.30
Gas $ 0.00 $ 0.00 $ 0.00 $ 0.00 $ 0.00 $0.00
OTHER $ 521.49 $ 0.00 $ 521.49 $ 0.00 $ 521.49 $0.00
Total 6524: $ 631.01 $ 606.52 $ 3,909.09 $ 606.52 $ 3,302.57 $1,284.82
Company 4 - IA
Anything $ 0.00 $ 0.00 $ 0.00 $ 0.00 $ 0.00 $0.00
Other $ 0.00 $ 0.00 $ 171.90 $ 0.00 $ 171.90 $0.00
Total 1123: $ 0.00 $ 0.00 $ 171.90 $ 0.00 $ 171.90 $0.00
我试着把公司的名字和总的行分为几组。如果我将其设置为多行并使用

^(.+?\s-\s.{2})$
那会给我公司的名字。我也试过:

^(.+\s-\s\w{2}|Total\s\d{1,5}:.+)$
这将得到两条线,并将工作,但他们都通过作为第一组。有没有办法确保它们匹配?那么第1组将是公司名称,第2组将是总行?我试着在中间添加这样的东西,但是它没有用,因为在公司和总行之间有不同的行数。
^(.+\s-\s\w{2})$(^.+$){1,20}^(Total\s\d{1,5}:.+)$
(我不记得我到底有什么,但它给了我中间的几行……只是不一定是正确的数字。)有没有办法跳过公司名称和它们各自的总行之间的那些行,让第1组作为客户名称,第2组作为总行

^(.+\s-\s\w{2})$|^(Total\s\d{1,5}:.+)$
演示:

试试这个:

^(.+\s-\s\w{2})$|^(Total\s\d{1,5}:.+)$

演示:

我能用这个得到我想要的东西:

^(.*\s-\s\w{2})$\n(^.+$\n)+?^Total\s(\d{2,5}:.+)$

它给出了第1组中的客户名称和第3组中的总行,我可以忽略第2组。谢谢。

我能用这个得到我想要的东西:

^(.*\s-\s\w{2})$\n(^.+$\n)+?^Total\s(\d{2,5}:.+)$

它给出了第1组中的客户名称和第3组中的总行,我可以忽略第2组。谢谢。

我应该补充一点,它不是“公司1”或“公司2”,但它总是从行的开头开始,并包含“-XX”表示状态。我只想要整行,我可以根据名称和状态将其拆分。我应该补充的是,它不是“公司1”或“公司2”,但它总是从行的开头开始,并包含“-XX”表示状态。我只需要整行代码,我可以根据名称和状态将其拆分。这与我以前的做法非常接近(尽管它确实将它们分为多个组)。问题是,当我在比赛中循环时,我必须跟踪我参加的比赛。如果可能的话,我希望能够一次通过,获得客户名称和总数。我希望第1场比赛将第1组和第2组放在一起。更容易循环。@J_K_M_N非捕获模式确实可以帮助清理结果。希望你现在能更好地阅读结果。这与我之前的结果非常接近(尽管它将他们分成了小组)。问题是,当我在比赛中循环时,我必须跟踪我参加的比赛。如果可能的话,我希望能够一次通过,获得客户名称和总数。我希望第1场比赛将第1组和第2组放在一起。更容易循环。@J_K_M_N非捕获模式确实可以帮助清理结果。希望您现在能更好地阅读结果。我将其更改为:^(.*-\w{2})$\n(?>^.+$\n)+?^TOTAL\s(\d{2,5}:.+)$,这样我只得到组1和组2。我学习了非捕获模式。:)我将其更改为:^(.*-\w{2})$\n(?>^.+$\n)+?^TOTAL\s(\d{2,5}:.+)$,以便只获取组1和组2。我学习了非捕获模式。:)