Python正则中列表转字符串后无法正常使用的问题咨询
关于re.findall返回列表转字符串失效的问题解答
第一段代码问题分析与修正
re.findall返回的是匹配结果的列表,在你的代码里,匹配后x的值是['/AB2']。当你对列表执行str(x)转换时,得到的是字符串"['/AB2']"——这个字符串包含方括号和单引号,而原字段值里根本没有这些内容,所以re.sub找不到匹配项,替换自然不生效。
正确的做法是直接取列表的第一个元素(因为这里的正则只会匹配到一个结果),替换str(x)为x[0]即可:
import re field_value="CREDIT MEMO SHHAA00172362/AB2" field_value=field_value.replace("CREDIT MEMO ","") x=re.findall("/.*",field_value) print(x) if x: field_value=re.sub(x[0],"",field_value) print(field_value) # 输出: SHHAA00172362
第二段代码问题分析与修正
同样的核心问题:y是['SICR'],str(y)会把它转换成"['SICR']",而x[0]是纯字符串'SICR',两者内容完全不同,所以相等判断永远不成立。
另外你的代码还有一个错误:re.split("-", field_value,1)的maxsplit=1参数表示只分割一次,返回的列表只有两个元素['SICR', '2205-11-0-00045-1'],访问x[2]会触发IndexError索引越界。
修正后的代码如下:
import re field_value='SICR-2205-11-0-00045-1' y=re.findall('^[A-Z]{4}',field_value) # 简化正则为^[A-Z]{4},效果和原正则一致 if y: print(y) x=re.split("-",field_value,1) print(x[0]) # print(x[2]) # 注释掉,避免索引越界 if x[0] == y[0]: print('123') # 现在会正常输出123
内容的提问来源于stack exchange,提问作者Safeer Khan
相关产品推荐
相关产品推荐

