3

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

下面是一系列字母数字的格式。它以 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

4 回答 4

2

您可以对单个 8 位组使用一个正则表达式,然后在一行中查找所有匹配项。

line = #string

regex = re.compile(r' (\w{8})')

groups = regex.findall(line) #gives a list of the matches in order of appearance
于 2013-07-23T17:59:25.473 回答
1

如果你使用 findall,你应该没问题

\w{8}

它匹配所有 8 位长的十六进制数字。

于 2013-07-23T17:57:49.703 回答
1

您确实可以使用环视

(?<=\d{4}\s{2})(\d{8}\s){4}(?=[\s|])
于 2013-07-23T17:54:40.640 回答
0

回复:不同的实现

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

于 2013-07-23T17:57:11.953 回答