Python re.match 返回 None,如何修改搜索字符串?

0 投票
1 回答
594 浏览
提问于 2025-04-17 14:16

以下是我的代码:

num1    -num2 num3: var.shift varstate=shift, var3=num, var4=False/True,  Shift   0xabc5d 

num1    -num2 num3: var.shift varstate=shift, var3=num, var4=False/True,  Shift 0xabc08 

num1    -num2 num3: var.shift varstate=shift, var3=num, var4=False/True,  Shift [38b]0xabc34

我想从这些代码行中提取出一个十六进制的值。我只需要其中一行的十六进制值,格式是[38b]0xabc1234567890000000000000000000000000。我不需要所有的十六进制值。

我所有的十六进制值都是以0x开头的,所以我在re.match中使用了这个前缀。

#!/usr/bin/env python
import sys
import re
import binascii
import string
value_file = open("test2.txt","r")
file2 = open("out.txt", "w")

for line in value_file:
    line_string = str(line)
    line_nospace = line.replace(" ", "")
    lines_cont = line_nospace.rstrip("\n")
    reg_match = re.match(r'\[([38b]]*)\](0-9a-zA-Z)', lines_cont)
    print reg_match

1 个回答

2

你的正则表达式 (.*) 0x(\.*) 中,第二组的句点被转义了,这意味着它在匹配零个或多个句点,而不是零个或多个任意字符。

如果你想匹配 0x 后面的所有内容,就把反斜杠去掉。

撰写回答