【发布时间】:2023-03-16 06:14:02
【问题描述】:
我想使用正则表达式从报告文档中提取不同的文本块 - 每个新页面在“FIRST NOTICE”前面都用 \x0c 表示 [未在下面显示]。我已经包含了一张带行号的图片以及文本,尽管格式可能是一个问题。
报告文本将包含 1..n 页 - 当数据返回时,每页都是单独的行项目。这些数据将被提取并转换为要输入数据库的行 [Number, Balance, Name, Address1, Address2, City, State, Zip]。
我需要提取的数据:
- 号码 - 11-1-11111-1
- 余额 - 1000.00
- 姓名 - “DOEN, JOHN THOMAS”[第 14 行,第 7-50 栏]
- 地址 - 2 到 3 行
- 进一步 - 分为 Addr1/Addr2/City/State/Zip
- 城市线:City ST Zip4 或 Zip-9
- 城市可能包含空格
数量和余额相对容易获得 - 这是我遇到最多问题的名称和地址部分,我正在寻找一个单一的正则表达式,它将把每个项目拉到自己的组中。
地址在第 15-17 行和第 7-50 列。
这可能吗?
包含两页的示例文档:
FIRST NOTICE COMPANYNAME
NOTICE DATE....: 01/01/2001 1111 N NORTHWOOD DR
NUMBER.........: 11-1-11111-1 SOMEWHERE WY 05920-5929
THE DATE.......: 02/01/2001
Some data only.
DOEN, JOHN THOMAS ORIGINAL....: 5789.00
1111 N WALT AVE BALANCE.....: 1000.00
C/O SOMEONE ELSE PAST DUE....: 500.00
SOMEWHERE WY 04741-5555
THIS IS THE END OF THIS PAGE DATE DUE: 02/01/2001
FIRST NOTICE COMPANYNAME
NOTICE DATE....: 01/01/2001 1111 N NORTHWOOD DR
NUMBER.........: 22-2-22222-2 SOMEWHERE WY 05920-5929
THE DATE.......: 02/01/2001
Some data only.
DOE, JOHNAT ZOAR ORIGINAL....: 2211.00
11111 N DIVISOR RD BALANCE.....: 2000.00
SOMWEHERE WY 05922 PAST DUE....: 1000.00
THIS IS THE END OF THIS PAGE DATE DUE: 02/01/2001
【问题讨论】:
-
是的,这是可能的。我在学习编程大约 2 年的时间里学习了正则表达式。每个人都应该学习它,而不是每次都问别人。一旦掌握了窍门,这并不难。
-
这就是 Stack Overflow 的用途,而不是侮辱某人并假设他们“每次都在问别人”。我知道如何研究,并且有 - 并且无法找到这样的东西。我知道正则表达式,但在我看来,这是一个高级问题。如果您认为可行,请提供解决方案。
-
@AndreasMüller 一个荒谬的评论,所以开发人员可以互相帮助。用你的方法就不需要这个网站了!
-
@Matthew M. up/downvoting 取决于研究工作。我很欣赏您放置的样本,但我还看不到研究工作(您尝试过的正则表达式)。简单看一下,您的正则表达式必须类似于 FIRST NOTICE 空格(文本直到换行) NOTICE DATE...(日期)空格(字母数字直到换行)。在我看来不是很先进。您可以相信我,这并不是侮辱,而是作为一般说明 - 您可能没有注意到有多少人在 SO 上发布问题,而他们显然从未阅读过他们提出的任何问题。
-
@Jaycee 是的。所以他们可以互相帮助。不是这样他们就可以做别人的工作。通常你会在调试几天后看到我发布 SO 问题,这是我无法向自己解释的行为,或者直到我不知道要尝试什么。这就是要走的路,除非你想问相当简单的问题......