Skip to main content
 首页 » 编程设计

python之仅从连续字符串中选择正则表达式匹配

2025年05月04日34zhengyun_ustc

我想使用这个正则表达式

r"Summe\d+\W\d+" 

匹配这个字符串

150,90‡50,90‡8,13‡Summe50,90•50,90•8,13•Kreditkartenzahlung

但我只想过滤掉这个特定的部分

Summe50,90

我可以用这个正则表达式选择整个字符串,但我不确定如何只过滤掉匹配的部分

这是我试图从 pdf 中获取金额的函数:

    def get_amount(url): 
      data = requests.get(url) 
      with open('/Users/derricdonehoo/code/derric-d/price-processor/exmpl.pdf', 'wb') as f: 
        f.write(data.content) 
 
      pdfFileObj = open('exmpl.pdf', 'rb') 
      pdfReader = PyPDF2.PdfFileReader(pdfFileObj) 
 
      pageObj = pdfReader.getPage(0) 
      text = pageObj.extractText().split() 
 
      regex = re.compile(r"Summe\d+\W\d+") 
 
      matches = list(filter(regex.search, text)) 
      for i in range(len(matches)): 
        matchString = '\n'.join(matches) 
 
 
      print(matchString) 

如上所述,我想要有关如何最好地过滤掉该字符串的一部分以便它仅返回匹配部分的指导。最好在两侧使用不同长度的字符,但这不是优先事项。

谢谢!!

请您参考如下方法:

我的猜测是这个简单的表达式可能在这里起作用,

(Summe.+?)• 

测试

import re 
 
regex = r"(Summe.+?)•" 
 
test_str = "150,90‡50,90‡8,13‡Summe50,90•50,90•8,13•Kreditkartenzahlung" 
 
matches = re.finditer(regex, test_str, re.MULTILINE) 
 
for matchNum, match in enumerate(matches, start=1): 
 
    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group())) 
 
    for groupNum in range(0, len(match.groups())): 
        groupNum = groupNum + 1 
 
        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum))) 

Demo