Error: _sre.SRE_Pattern is not iterable ,I am using re.compile() to get the strings by comparing begining values and getting this errror

Error: _sre.SRE_Pattern is not iterable ,I am using re.compile() to get the strings by comparing begining values and getting this errror

我在一个 icode 中有很多代码,但很多代码都以相同的数字开头

例如3435435353544, 3435435878993, 3435435453535.... 我有 4 种类型,需要使用 if 子句

来定义它

我的代码

import numpy as np
import pandas as pd
import awswranger as wr
import re

pattern1=re.compile(r'^3233443446')
pattern2=re.compile(r'^3234444233')
pattern3=re.compile(r'^3242444233')
pattern4=re.compile(r'^7634726472')

def get_match_codes(icode):
    try:
       if icode in pattern3 or icode in pattern4:
          stype='straight'
       elif icode in pattern2 or icode in pattern1:
          stype='late'
       else:
          stype="none"
       return stype
    except Exception as e:
       return 'Error from get_match_codes' +str(e)
     


icode in pattern3 不进行正则表达式匹配 - 您发现运行时错误。

https://docs.python.org/3/library/re.html?highlight=match#re.match

改为使用pattern3.match(icode)pattern3.search(icode)

也没有明显的需要try/except。

如果使用 re.match() 这仅匹配字符串的开头,根据文档,因此您不需要在 re.或者使用 re.search() 在字符串中的任何位置查找正则表达式。

所以你的代码变成:

import re

pattern1=re.compile(r'^3233443446')
pattern2=re.compile(r'^3234444233')
pattern3=re.compile(r'^3242444233')
pattern4=re.compile(r'^7634726472')

def get_match_codes(icode):
    if pattern3.match(icode) or pattern4.match(icode):
        stype='straight'
    elif pattern2.match(icode) or pattern1.match(icode):
        stype='late'
    else:
        stype="none"
    return stype
       

print( get_match_codes("3233443446" ) )

输出:

 late

此外,下次您提出问题时,请使您的代码最少(例如,没有不需要的导入)和可执行 - 包括对您的函数的调用和该调用的一些数据。这些都是为了让你自己对回答者友好 - 让读者尽可能容易地帮助你并希望提供答案是有礼貌的 - 所以让你的代码可以通过 copy/paste 执行而不添加任何东西 你也帮助 你自己.