错误:_sre.SRE_Pattern 不可迭代,我正在使用 re.compile() 通过比较起始值并获取此错误来获取字符串

Posted

技术标签:

【中文标题】错误:_sre.SRE_Pattern 不可迭代,我正在使用 re.compile() 通过比较起始值并获取此错误来获取字符串【英文标题】:Error: _sre.SRE_Pattern is not iterable ,I am using re.compile() to get the strings by comparing begining values and getting this errror 【发布时间】:2022-01-01 01:31:42 【问题描述】:

我的 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)
     


【问题讨论】:

elif(pcode in ['232423423','234234234']: 中有一个不需要的( 对不起我的坏...你现在可以看到 代替icode in pattern3 使用例如pattern3.match(icode) 【参考方案1】:

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

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

【讨论】:

以上是关于错误:_sre.SRE_Pattern 不可迭代,我正在使用 re.compile() 通过比较起始值并获取此错误来获取字符串的主要内容,如果未能解决你的问题,请参考以下文章

Python2上的`setattr()``_sre.SRE_Pattern`

如何获取 MyPy 的正则表达式模式类型

正则表达式的9个方法

类型错误:类对象不可迭代[重复]

difflib,类型错误 int 对象不可迭代

Python TypeError:“_csv.writer”对象不可迭代