错误:_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() 通过比较起始值并获取此错误来获取字符串的主要内容,如果未能解决你的问题,请参考以下文章