如何使用正则表达式在 Python 中查找文本并写入文件

问题描述 投票:0回答:3

我想从下面的文字中找到地址

Private Key HEX: 81533e629f27aee5ec97b425a5a6a1ef35527fb1082db16776aa054c0db6c93f
              
Private Key WIF: 5JoF25azjFR6iMe554QPPb4xyYPM79Ve3NFywnafwnFnt45qQ8s
              
Private Key WIF compressed: L1Z6smF3oUdNDY6cxv2DphNW4ZXdk8VQVSq8LpBctnkHWBJz4Zxm 
            
Public Key: 04f23e94e1faf3a9883573507c52b60c857b0e34400b5bb951c07af1af2ddde4daa3724c9e1e652e18e4495f8288aa5c3e976ed64bba1b8518ce93a7ccaf3e422b 
                      
Public Key compressed: 03f23e94e1faf3a9883573507c52b60c857b0e34400b5bb951c07af1af2ddde4da

                      
Public Address 1: 1EMEJ6QxiPFW6RzYbzXVGojJubCGgGjDFP   
                      
Public Address 1 compressed: 1748nYkyMuzekueBPHQDzwX1txFfSw2ZBZ   
                      
Public Address 3: 3AUkFufz5viJiFKfTXPDaBS6og5ScJMCK1  
                      
Public Address bc1 P2WPKH: bc1qgf5gqhw0zu5mdg2ckapeqqxxjqsjw6ypkrrkw2    
                      
Public Address bc1 P2WSH: bc1qldst6n54d5qxf6t3sffqepkhtdr9vnm9r395sjn9caq9pz50emwsexcnsa  

也就是说,

  • 1EMEJ6QxiPFW6RzYbzXVGojJubCGgGjDFP
  • 1748nYkyMuzekueBPHQDzwX1txFfSw2ZBZ
  • 3AUkFufz5viJiFKfTXPDaBS6og5ScJMCK1
  • bc1qgf5gqhw0zu5mdg2ckapeqqxxjqsjw6ypkrrkw2
  • bc1qldst6n54d5qxf6t3sffqepkhtdr9vnm9r395sjn9caq9pz50emwsexcnsa

注意,每次的地址都是随机的,以上只是一个例子。我已经尝试过以下方法,但似乎不起作用:

def use_regex(input_text):
    pattern = re.compile(r"Public Address 1: [A-Za-z0-9]+", re.IGNORECASE)
    return pattern.match(input_text)

如有任何建议,我们将不胜感激!

python python-3.x regex
3个回答
2
投票

我们要做的就是首先识别正确的线路,然后选择按键。下面的代码就可以了:

import re

def extract_addresses(input_text):
    pattern = re.compile(r"Public Address(?: \w+)*: ([A-Za-z0-9]+)", re.IGNORECASE)
    return pattern.findall(input_text)

调用函数时会产生以下列表 (

print(extract_addresses(text))
):

['1EMEJ6QxiPFW6RzYbzXVGojJubCGgGjDFP',
 '1748nYkyMuzekueBPHQDzwX1txFfSw2ZBZ',
 '3AUkFufz5viJiFKfTXPDaBS6og5ScJMCK1',
 'bc1qgf5gqhw0zu5mdg2ckapeqqxxjqsjw6ypkrrkw2',
 'bc1qldst6n54d5qxf6t3sffqepkhtdr9vnm9r395sjn9caq9pz50emwsexcnsa']

希望这有帮助!愿代码与您同在...


1
投票

我相信你应该寻找

:
符号,然后采取它右侧的所有内容:

pattern = ".*?\:\s*([^s]*)"
for mm in re.finditer(pattern,text):
    print(mm.group(1))

pattern = ":?.*?\:\s*([^\s]*)"
tt = re.findall(pattern,text)
print(tt)

0
投票

检查一下:

import re

def find_addresses(text):
    # Regex pattern to match Bitcoin addresses
    pattern = r"\b[13][a-km-zA-HJ-NP-Z1-9]{25,34}\b|\bbc1[a-z0-9]{39,59}\b"
    # Find all matches using re.findall
    addresses = re.findall(pattern, text)
    return addresses

def write_addresses_to_file(addresses, filename='addresses.txt'):
    # Write addresses to a file
    with open(filename, 'w') as file:
        for address in addresses:
            file.write(address + '\n')

# Example text input
input_text = """
Private Key HEX: 81533e629f27aee5ec97b425a5a6a1ef35527fb1082db16776aa054c0db6c93f
Private Key WIF: 5JoF25azjFR6iMe554QPPb4xyYPM79Ve3NFywnafwnFnt45qQ8s
Private Key WIF compressed: L1Z6smF3oUdNDY6cxv2DphNW4ZXdk8VQVSq8LpBctnkHWBJz4Zxm 
Public Key: 04f23e94e1faf3a9883573507c52b60c857b0e34400b5bb951c07af1af2ddde4daa3724c9e1e652e18e4495f8288aa5c3e976ed64bba1b8518ce93a7ccaf3e422b 
Public Key compressed: 03f23e94e1faf3a9883573507c52b60c857b0e34400b5bb951c07af1af2ddde4da
Public Address 1: 1EMEJ6QxiPFW6RzYbzXVGojJubCGgGjDFP   
Public Address 1 compressed: 1748nYkyMuzekueBPHQDzwX1txFfSw2ZBZ   
Public Address 3: 3AUkFufz5viJiFKfTXPDaBS6og5ScJMCK1  
Public Address bc1 P2WPKH: bc1qgf5gqhw0zu5mdg2ckapeqqxxjqsjw6ypkrrkw2    
Public Address bc1 P2WSH: bc1qldst6n54d5qxf6t3sffqepkhtdr9vnm9r395sjn9caq9pz50emwsexcnsa
"""

# Extract addresses
found_addresses = find_addresses(input_text)
# Write addresses to a file
write_addresses_to_file(found_addresses)
print("Addresses have been written to 'addresses.txt'")
© www.soinside.com 2019 - 2024. All rights reserved.