我正在学习正则表达式并尝试执行以下操作:
以下是一系列字母数字的格式。它以4位开头,后跟2位,后跟8位后跟一个空格后跟8位后跟一个空格后跟8位后跟一个空格后跟8位后跟一个空格后跟一个OR条
FFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |
或写得更清楚:
FFFF[space][space]FFFFFFFF[space]FFFFFFFF[space]FFFFFFFF[space]FFFFFFFF[space]|
我首先需要在以00A3开头的文件中找到正确的行。然后我需要拉出我使用的框架组的数字组:
p = re.compile('00A3 ') # search for 00A3[space][space]
r = re.compile(???) # search for desired 8 digit groups
q = re.compile(\[SECTION2\])
dataString = inFile.next() # 00A3 388A63FF 00000DF1 52984731 FF989ACB
while not q.match(dataString) # look for [SECTION2] line in file. This means we passed where 00A3 would have been so it must not be here.
if p.match(dataString):
numbers = r.findall(dataString) # numbers = [388A63FF, 00000DF1, 52984731, FF989ACB]
break
dataString = inFile.next() # get next line to check
这应该给我一个进一步处理的数字列表。我只是不确定如何编写正则表达式,只能找到4组8个字母数字,用空格分隔。我的想法是寻找8个字母数字数字以及前面的空格和后面的空格,但这会导致问题,看起来会怎样?
我展望未来,看看背后的选项,但我感到困惑。
我对此仍然很陌生,特别是在Python中,所以我愿意接受有关更好实现的建议。
谢谢!
答案 0 :(得分:2)
您可以将一个正则表达式用于单个8位数组,然后查找一行中的所有匹配项。
line = #string
regex = re.compile(r' (\w{8})')
groups = regex.findall(line) #gives a list of the matches in order of appearance
答案 1 :(得分:1)
您确实可以使用lookarounds:
(?<=\d{4}\s{2})(\d{8}\s){4}(?=[\s|])
答案 2 :(得分:1)
如果你使用的是findall,你可以使用
\w{8}
它匹配所有长度为8位的十六进制数字。
答案 3 :(得分:0)
re:不同的实现
all_numbers =[]
with open('input','r') as my_file:
for line in my_file:
line = line.split()
if line[0] == "00A3":
numbers = line[1:5]
all_numbers.append(numbers)
numbers
看起来像['388A63FF', '00000DF1', '52984731', 'FF989ACB']
而all_numbers
只是找到的数字列表。