Python/Regex无法找到短语或值,即使它在文本中像白天一样简单

flseospp  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(107)

下面是打印到控制台时的文本:

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.")`


我尝试了不同的正则表达式组合,似乎找不到正确的组合来找到我要找的值。

xxls0lw8

xxls0lw81#

尝试以下 * 捕获模式 *。

(?sm)^Tax Exempt Securities.+?^  Sales Cost Removed.+?\(?(.+?)\)?$.+?Fixed Income

字符串

  • (?sm),切换 “单行”“多行” 模式。
  • ^Tax Exempt Securities,静态文本,位于行首,^
  • .+?^ Sales Cost Removed,直到静态文本的所有字符,位于行首
  • .+?\(?,最多可选择(的所有字符
  • (.+?)\)?$,捕获所有字符,可选),或行尾,$
  • .+?Fixed Income,静态文本之前的所有字符

这里有一个例子。

p = r'(?sm)^Tax Exempt Securities.+?^  Sales Cost Removed.+?\(?(.+?)\)?$.+?Fixed Income'
m = re.search(p, s)
if m: print(m.group(1))


输出

350,825.56

相关问题