我有下面的代码,希望完成简单的模式识别。我想要它找到所有出现的PDP或CDP或PRS或EDP,后面是(0或最多3)无位数,然后是(确切的6位数)。看起来很简单,但熊猫总是在下面尖叫错误。
数据行样本:
row1 CAPS ACCT # /APR 1-APR 30 18/EDP 443996/SPECIAL PRICING
row2 CAPS /EDP# 320902/UNUSED LABELS
ValueError: Wrong number of items passed 5, placement implies 1
df['USPS_refund_no'] = df['APEX Invoice Description'].str.extract(r'((EDP)|(PDP)|(CDP)|(PRS)\D{,3}\d{6})',expand=True)
提前感谢
发布于 2018-09-19 12:48:26
在您的示例中,str.extract
需要一个捕获组。若要在数字之前匹配备选方案,请将备选方案列表与非捕获组放在一起,并使用外部捕获组捕获整个模式:
df['USPS_refund_no'] = df['APEX Invoice Description'].str.extract(r'((?:EDP|PDP|CDP|PRS)\D{0,3}\d{6})',expand=True)
见regex演示。
详细信息
(
-外部捕获组的启动(extract
需要)(?:EDP|PDP|CDP|PRS)
-一个非捕获组,它匹配里面列出的任何一个备选方案(请注意,您也可以将其写为(?:[EPC]DP|PRS)
):EDP
- EDP
|
-或PDP
- PDP
|
-或CDP
- CDP
|
-或PRS
- PRS
\D{0,3}
-0到3个非数字\d{6}
-六位数)
-外部捕获组的末端。https://stackoverflow.com/questions/52413345
复制相似问题