Python 正则表达式(搜索)无法检测错误

Python 正则表达式(搜索)无法检测错误,python,python-3.x,regex,csv,re,Python,Python 3.x,Regex,Csv,Re,我尝试使用re.search检测CSV文件中的数据错误,其中错误数据(与给定模式不匹配)将发送到一个列表(错误),而正确数据(与模式匹配)将发送到另一个列表(干净) 以下是数据在CSV文件中的外观: UES9151GS5DE-PEK UES915*GS5 JFK FCO WYu2010YH8 ORD罐 HCA3158QA6 ORD~AN HCA3158QA6 KUL A;s HCA3158QA6 0 LHR HCA3158QA6 A;S ORD HCA3158QA6~AN PVG 这是我的代

我尝试使用
re.search
检测CSV文件中的数据错误,其中错误数据(与给定模式不匹配)将发送到一个列表(错误),而正确数据(与模式匹配)将发送到另一个列表(干净)

以下是数据在CSV文件中的外观:

<代码> UES9151GS5DE-PEK UES915*GS5 JFK FCO WYu2010YH8 ORD罐 HCA3158QA6 ORD~AN HCA3158QA6 KUL A;s HCA3158QA6 0 LHR HCA3158QA6 A;S ORD HCA3158QA6~AN PVG 这是我的代码:

导入csv
进口稀土
干净=[]
错误=[]
pid_模式='[A-Z]{3}[0-9]{4}[A-Z]{2}[0-9]'
dept_模式='[A-Z]{3}'
arr_模式='[A-Z]{3}'
将open(r“test.csv”)作为csvfile:
reader=csvfile
对于我的读者:
pid=重新搜索(pid_模式,i)
部门=重新搜索(部门模式,i)
arr=重新搜索(arr_模式,i)
如果pid=一个也没有没有,啊!=无:
干净。附加(i)
elif pid==无:
错误。追加(i)
elif dept==无:
错误。追加(i)
elif arr==无:
错误。追加(i)
因此,在运行代码后,我得到:

clean
['UES9151GS5,北京登\n',
“HCA3158QA6,作战需求文件,~AN\n”,
“HCA3158QA6,A;S,A;S,\n”,
“HCA3158QA6,0,LHR\n”,
“HCA3158QA6,A;S,ORD\n”,
'HCA3158QA6,~AN,PVG\n']
错误
['UES915*GS5,JFK,FCO\n',
'WYu2010YH8,作战需求文件,CAN\n']
显然,代码只检查第一列(pid),而忽略其余的。预期结果应如下所示:

clean
['UES9151GS5,北京登\n']
错误
[HCA3158QA6,ORD,~AN\n',
“HCA3158QA6,A;S,A;S,\n”,
“HCA3158QA6,0,LHR\n”,
“HCA3158QA6,A;S,ORD\n”,
“HCA3158QA6,~AN,PVG\n”,
“UES915*GS5,肯尼迪机场,FCO\n”,
'WYu2010YH8,作战需求文件,CAN\n']

到目前为止,我无法找到错误或找到任何替代解决方案。

问题是正则表达式总是在找到第一个匹配项时触发。由于csv读取器返回的行的格式类似于“PID,DEPT,ARR”,这意味着如果PID中有格式[A-Z]{3},它将找到匹配的行。为了防止出现这种情况,可以将列分开并搜索与列对应的每个部分上的正则表达式(我不知道如何做),或者更改正则表达式

import csv
import re

clean = []
error = []

pid_pattern = '[A-Z]{3}[0-9]{4}[A-Z]{2}[0-9],.+,.+' // only look at the first column
dept_pattern = '.+,[A-Z]{3},.+' // only look at second column
arr_pattern = '.+,.+[A-Z]{3}' // only look at third column

with open(r"test.csv") as csvfile:
    reader = csvfile
    for i in reader:
        pid = re.search(pid_pattern,i)
        dept = re.search(dept_pattern,i)
        arr = re.search(arr_pattern,i)

        if pid !=None and dept != None and arr != None:
             clean.append(i)
        elif passenger_id == None:
            error.append(i)
        elif departure == None:
            error.append(i)
        elif arrival == None:
            error.append(i)
或者您可以将整个正则表达式组合成一个
[A-Z]{3}[0-9]{4}[A-Z]{2}[0-9],[A-Z]{3}[A-Z]{3}


用于使用匹配和组捕获的正则表达式([A-Z]{3}[0-9]{4}[A-Z]{2}[0-9]),([A-Z]{3}),([A-Z]{3})

乘客id和到达位置在哪里?将正则表达式和使用组结合起来应该可以做到这一点,匹配元组还可以在需要时提供更多细节。@sidmishraw这是true@RyanSchaefer非常感谢您的解释和帮助。它现在可以正常工作了