我有一个数据帧列,它的输入如下。
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 != ""]
省略空项目