我有很多基于文本的财务报告,我最终想要转换为CSV文件。该文件包含三列,其中三个字母的月份缩写垂直打印。垂直月份(JAN FEB,......)合谋破坏财务报告的流程,我想在第一轮流程中将其从文件中删除,最终旨在提取财务数据。我已经包含了我在下面描述的图像:
编辑:我知道这几个月总是在大写字母中。
如您所见,Sales行在第三行的DEC中运行到C.几行下来你可以看到毛利率在11月的第二和第三个N之间。所以问题是如何编写一些正则表达式,从文档中删除日期,然后提取我的财务数据。
编辑2:这是一个更多文件的粘贴:
D D D
E E E
C C Sales $123,000C
Cost of Goods Sold $120,000
N NGross Margin $3,000N
O O O
V V 20- OperatingV
O O O
C C 30,000 TravelC
T T T
S S 120 UtilitiesS
E E E
P P P
10,000 Membership
A A A
U U U
G G 1,9000 RentG
26 Postage
J J J
L L L
Y Y Y
2,400 Tooling
J J J
U U U
N -22,000 Taxes NPretax Income
任何建议或帮助表示赞赏。
答案 0 :(得分:2)
这是使用您提供的测试数据查找所有违规字母的模式。
((^[A-Z])(?=\s))|((?<=\d)[A-Z])|([A-Z](?=\s))|((?<=[a-z])[A-Z])|([A-Z](?=[A-Z]))
修改强>
由于评论,又增加了一个组
说明:
第1组:((^[A-Z])(?=\s))
细分:在行的开头查找大写字母,后面跟着空格
第2组:((?<=\d)[A-Z])
细分:查找以数字
第3组:([A-Z](?=\s))
细分:查找大写字母后跟空格
第4组:((?<=[a-z])[A-Z])
细分:查找以小写字母开头的大写字母
第5组:([A-Z](?=[A-Z]))
细分:在其后面直接查找带大写字母的大写字母
答案 1 :(得分:1)
搜索^([ABCDEFGJLMNOPRSTUVY])\s+\1\s*([-a-zA-Z\d, $]+)\1$
并替换\2
会让您关闭。
在TextWrangler 4.5.11上测试
略微调整以适应RegEx101
将^&+
添加到第二个拼出的类似乎修复了@Mutuelinvestor Rubular。 (之前没有关心它,因为逐字测试数据中缺少它。)
因此:^([ABCDEFGJLMNOPRSTUVY])\s+\1\s*([-a-zA-Z\d, $^&+]+)\1$
将被搜索。
然而,它仍然没有处理最后一行,初始资本只重复一次。
击穿:
^
线锚的开始
([ABCDEFGJLMNOPRSTUVY])
从几个月内抓取一封大写字母&#39;三个字母的缩写 - 以两个后来的重复为目标
\s+
至少有一个空格字符
在行首开始捕获的\1
反向引用字母
\s*
任意数量的空白字符(包括无)
([-a-zA-Z\d, $^&+]+)
捕获在明显有效载荷中观察到的任何字符 - 用于替换为\ 2
\1
对行上第一个字符的另一个反向引用
$
行尾锚