Extracting dollar prices and numbers with comma as thousand separator from PDF converted to text format(从转换为文本格式的PDF中提取以逗号为千分隔符的美元价格和数字)
问题描述
我正在尝试用c#编辑一些带有美元金额的pdf。以下是我尝试过的内容
@"/ (d)(?= (?:d{ 3})+(?:.|$))| (.dd ?)d *$/ g"
@"(?<=each)(((d*[,|.]d{2,3}))*)"
@"(?<=each)(((d*[,|.]d{2,3}))*)"
@"d+.d{2}"
以下是它需要匹配的一些测试用例
76,249.25
131,588.00
7.09
21.27
420.42
54.77
32.848
3,056.12
0.009
0.01
32.85
2,948.59
$99,249.25
$9.0000
$1,800.0000
$1,000,000
以下是它不应针对的一些测试用例
666-257-6443
F1A 5G9
Bolt, Locating, M8 x 1.25 x 30 L
Precision Washer, 304 SS, 0.63 OD x 0.31
Flat Washer 300 Series SS; Pack of 50
U-SSFAN 0.63-L6.00-F0.75-B0.64-T0.38-SC5.62
U-CLBUM 0.63-D0.88-L0.875
U-WSSS 0.38-D0.88-T0.125
U-BGHK 6002ZZ - H1.50
U-SSCS 0.38-B0.38
6412K42
Std Dowel, 3/8" x 1-1/2" Lg, Steel
2019.07.05
2092-002.0180
SHCMG 0.25-L1.00
280160717
请注意,c#部分正在与iText 7 pdfSweep接口。
Guid g = new Guid();
CompositeCleanupStrategy strategy = new CompositeCleanupStrategy();
string guid = g.ToString();
string input = @"C:UsersJMDocumentspdftest61882 _280011434 (1).pdf";
string output = @"C:UsersJMDocumentspdftest61882 _2800011434 (1) x2" + guid+".pdf";
string regex = @"(?m)^$?[0-9]{1,3}(?:,[0-9]{3})*(?:.[0-9]+)?$";
strategy.Add(new RegexBasedCleanupStrategy(regex));
PdfDocument pdf = new PdfDocument(new PdfReader(input), new PdfWriter(output));
PdfAutoSweep autoSweep = new PdfAutoSweep(strategy);
autoSweep.CleanUp(pdf);
pdf.Close();
请分享您的智慧
推荐答案
您可以使用
$?[0-9]{1,3}(?:,[0-9]{3})*(?:.[0-9]+)?
或者,如果价格是整行的:
^$?[0-9]{1,3}(?:,[0-9]{3})*(?:.[0-9]+)?$
请参阅regex demo
奖金:要仅获取价格值,您需要删除$
后面的?
以使其成为必填项:
$([0-9]{1,3}(?:,[0-9]{3})*(?:.[0-9]+)?)
(我添加了一个捕捉组,以防您需要将数字值与$
字符分开访问)。
如果您需要支持任何货币字符,而不仅仅是$
,请将$
替换为p{Sc}
。
详细信息
^
-字符串开始$?
-可选的美元符号[0-9]{1,3}
-一到三位数(?:,[0-9]{3})*
-逗号和三位数字的任意0个或更多重复(?:.[0-9]+)?
-一个可选的点序列,然后是任意一个或多个数字$
-字符串结束。
C#检查是否匹配:
if (Regex.IsMatch(str, @"^$?[0-9]{1,3}(?:,[0-9]{3})*(?:.[0-9]+)?$"))
{
// there is a match
}
pdfSweep
注意:
应用the fix from this answer。关键是在分析文本时会丢失换行符。然后,您需要的正则表达式是
@"(?m)^$?[0-9]{1,3}(?:,[0-9]{3})*(?:.[0-9]+)?
?$"
WHERE(?m)
使^
和$
匹配行的开始/结束,并且
?
是必需的,因为$
在.NET正则表达式中只在LF之前匹配,而不在CRLF之前匹配。
这篇关于从转换为文本格式的PDF中提取以逗号为千分隔符的美元价格和数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从转换为文本格式的PDF中提取以逗号为千分隔符的美元价格和数字
基础教程推荐
- c# Math.Sqrt 实现 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 将 XML 转换为通用列表 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- rabbitmq 的 REST API 2022-01-01