Python正则表达式的字母数字

时间:2013-07-23 17:50:07

标签: python regex

我正在学习正则表达式并尝试执行以下操作:

以下是一系列字母数字的格式。它以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中,所以我愿意接受有关更好实现的建议。

谢谢!

4 个答案:

答案 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只是找到的数字列表。