下面是打印到控制台时的文本:
Equities
Purchases
503,773.09
3,900,439.7
Sales Cost Removed
(397,196.15)
(3,835,270.54)
Other
-
(2,452.33)
Tax Exempt Securities
Purchases
301,596.54
606,468.27
Sales Cost Removed
(350,825.56)
(688,845.64)
Other
1,268.59
2,000.26
Fixed Income
Other
-
-
字符串
- 我试着在“免税证券”之后提取值,然后在“销售成本去除”之后。
- 在此数据的其他示例中,“Sales Cost Removed”不存在于“Tax Exempt Securities”标题下,因此我只想在阅读短语“Fixed Income”之前提取该值,因为它有自己的行项目,其中包括术语“Sales Cost Removed”。
- 我尝试了以下正则表达式模式:
pattern_1 = re.compile(r"Tax Exempt Securities[\s\S]((?!Fixed Income).)*?Sales Cost Removed[\s\S]*?(\d[\d,]*\.?\d*)")
- 当我在免税证券下搜索“购买”时,它可以正常工作,但在搜索“销售成本去除”或“其他”时,它就不起作用了。
- 下面是代码的其余部分,以便给予您更好地了解我要实现的目标:
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
text = page.extract_text()
print(text)
print(f"Searching in page {page_num+1}...")
matches = pattern_1.findall(text)
if matches:
print(f"Matches found: {matches}")
value_to_write = matches[0][1].replace(',', '')
print(value_to_write)
try:
value_to_write = float(value_to_write)
print(f"Value to write: {value_to_write}")
except ValueError:
print("Conversion to float failed, setting value to 0")
value_to_write = 0
break
else:
print("No match found on this page.")`
型
我尝试了不同的正则表达式组合,似乎找不到正确的组合来找到我要找的值。
1条答案
按热度按时间xxls0lw81#
尝试以下 * 捕获模式 *。
字符串
(?sm)
,切换 “单行” 和 “多行” 模式。^Tax Exempt Securities
,静态文本,位于行首,^
.+?^ Sales Cost Removed
,直到静态文本的所有字符,位于行首.+?\(?
,最多可选择(
的所有字符(.+?)\)?$
,捕获所有字符,可选)
,或行尾,$
.+?Fixed Income
,静态文本之前的所有字符这里有一个例子。
型
输出
型