我需要使用单独的工作流元素捕获这两个值。 (第3行值直接在“Soldto:”下面,与“Shipto:”相同。文本在页面上按列排列,因此将其视为简单模式不起作用。请告知。
图像是真实的,因为文本是通过扫描和OCR的TIF图像生成的,但这里有一些我已经复制用于测试的文本(比页面更简洁)
Soldto: Shipto: Billto:
00011222 00017872 10221060
COSTCO CO INC. - GLOBAL EDI COSTCO LANGLEY DEPOT COSTCO CO/LANGLEY
为了避免使这些列排成一行所需的所有HTML格式,我已将示例文本链接为.txt file.
感谢您的帮助。
答案 0 :(得分:1)
好吧,你实际上没有提出有问题的编程语言,所以我将在PHP
中展示一个可能的解决方案:
<?php
$string = 'Soldto: Shipto: Billto:
00011222 00017872 10221060
COSTCO CO INC. - GLOBAL EDI COSTCO LANGLEY DEPOT COSTCO CO/LANGLEY ';
$regex = '~ # delimiter
^Soldto: # look for "Soldto:" at the beginning of the string
(?:.*\R){2} # match everything up to the end + newline (2 times)
(?<poi>.*) # capture the whole third row into the group "poi"
~x';
preg_match_all($regex, $string, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$columns = preg_split('~\s{2,}~', $match["poi"]);
# the idea here is to watch out for at least 2 consecutive spaces
# and use this as delimiter
print_r($columns);
/* output
Array
(
[0] => COSTCO CO INC. - GLOBAL EDI
[1] => COSTCO LANGLEY DEPOT
[2] => COSTCO CO/LANGLEY
[3] =>
)
*/
}
?>
这显然可以根据您的需要进行调整,但您现在可以在$columns
数组中访问您的数据。
要仅从第一列(COSTCO CO INC. - GLOBAL EDI
)获取字符串,您可以使用以下正则表达式:
^Soldto:(?:.*\R){2}\K((?:(?!\s{2}).)+)
查看demo here。
答案 1 :(得分:0)
好的,所以我发现了一些关于Laserfiche的事情 1.它不使用\ R和\ K命令,因此PHP代码不起作用 2.它不会将OCR结果保留在列中,因此不需要通过列进行解析,而非常酷。
以下是一些文字:
品牌:生产时间:10:03:09
Sotdto:
00011222
COSTCO CO INC。 - 全球EDI
WA,
SHIPTO:
00010377
COSTCO / TRACY#179
25862 S SCHULTE
TRACY,CA,95376
以下是完成工作的正则表达式:
一个。 Soldto:So[lit1I|]dto:(?:\s+\d+\s+)(.+)
湾Shipto:Sh[lit1I|]pto:(?:\s+\d+\s+)(.+)
感谢您的帮助!