【问题标题】:Python Regular expressions for alpha numeric digits用于字母数字数字的 Python 正则表达式
【发布时间】:2013-07-23 17:50:07
【问题描述】:

我正在学习正则表达式并尝试做以下事情:

以下是一系列字母数字的格式。它以 4 位数字开头,后跟 2 个空格,然后是 8 位数字,然后是一个空格,然后是 8 位数字,然后是一个空格,然后是 8 位数字,然后是一个空格,然后是 8 位数字,然后是一个空格,然后是 OR 栏.

FFFF  FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |

或者写得更清楚:

FFFF[space][space]FFFFFFFF[space]FFFFFFFF[space]FFFFFFFF[space]FFFFFFFF[space]|

我首先需要在以 00A3 开头的文件中找到正确的行。然后我需要拉出我用 using 框住的数字组:

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 中,所以我愿意接受有关更好实施的建议。

谢谢!

【问题讨论】:

    标签: python regex


    【解决方案1】:

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

    line = #string
    
    regex = re.compile(r' (\w{8})')
    
    groups = regex.findall(line) #gives a list of the matches in order of appearance
    

    【讨论】:

    • 这很好用。我对其他建议有一些问题。感谢您对正则表达式的帮助!
    【解决方案2】:

    你确实可以使用lookarounds:

    (?<=\d{4}\s{2})(\d{8}\s){4}(?=[\s|])
    

    【讨论】:

    • 您可能想使用[^\W_] 而不是\d
    • 虽然我怀疑他会想要将\d{4} 更改为00A3 或他需要的任何文字字符串,并使用[\dA-F] 或类似的东西。
    【解决方案3】:

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

    \w{8}

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2014-05-24
        • 2020-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多