有没有一种方法可以将多个resub操作合并为一个,以使其在Python中更快



我有一个数据帧列,它的输入如下。

Input = '{1:A06YCASDB2LXXXXX000000}{2:A303TYDBTM2AXXD}{3:{108:23158}}{4:rn:20:APS0182405rn:23B:DREDrn:32A:182349USD3280,00rn:33B:USD31280,00rn:52M:/73240222rnRAWR UK Ltdrn28 School RoadrnfastrnCo. Angridrn:57A:TETRISrn:59:/BU500023231012000066241rnDUMMYNAME DUMMYLASTNAMErPLACE/RESTrn:70:PA74536/39rn:71A:OURrn-} 

我开发了一种链式正则表达式方法来应用多个re.sub操作

def chainRegex(string):                  
string = re.sub(":\d{2}[A-Z]?:"," ", string)
string = re.sub("rn"," ", string)        
string = [re.sub("([^a-zA-Z ]+?)","",i) for i in string.split()]
string = list(filter(None, string))
return string

预期输出如下所示。

output = ['AYCASDBLXXXXXATYDBTMAXXD', 'APS', 'DRED', 'USD', 'USD', 'RAWR', 'UK', 'Ltd', 'School','Road', 'fast', 'Co', 'Angrid', 'TETRIS', 'BU', 'DUMMYNAME', 'DUMMYLASTNAME', 'PLACEREST', 'PA', 'OUR']

有没有办法将这些多个补给行动合并为一个,使其更快,或者有没有其他更快的行动?解析选项不起作用,因为字符串的结构有时已损坏(缺少{}或键(。

您可以使用

def chainRegex(string):                  
x = re.sub(r"(?::d{2}[A-Z]?:|rn)+", " ", string).split()
return [w for w in ["".join(c for c in i if c.isalpha()) for i in x] if w != ""]

请参阅Python演示。

这里,

  • re.sub(r"(?::d{2}[A-Z]?:|rn)+", " ", string).split()查找冒号+两位数字、可选字母和冒号或CRLF行结尾的所有一个或多个序列,并用单个空格替换它们
  • ["".join(c for c in i if c.isalpha()) for i in x]-从每个单词中删除所有非字母
  • [w for w in ... if w != ""]省略空项目

相关内容

最新更新