Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查列中的字符串是否与两种格式之一匹配,如果不匹配,请重新格式化字符串_Python_Python 3.x_Pandas - Fatal编程技术网

Python 检查列中的字符串是否与两种格式之一匹配,如果不匹配,请重新格式化字符串

Python 检查列中的字符串是否与两种格式之一匹配,如果不匹配,请重新格式化字符串,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一列字符串,它们是ID,应该遵循以下格式:C-xxxxx-U-##或C-xxxxx-UX-##,其中x可以是数字或大写字母 我想检查ID是否符合这两种格式中的任何一种,如果不符合,我想重新格式化字符串 一些示例数据: C-20BV7-U-00 C-20BW5-U-00 C1AWT4-UR-00 <--- wrong format C-1B8V9-UR-00 C-20BX2-U-00 但是我如何在没有特定替换的情况下将格式更改为我想要的格式,因为我不知道它与使用特定正则表达式替换的格

我有一列字符串,它们是ID,应该遵循以下格式:C-xxxxx-U-##或C-xxxxx-UX-##,其中x可以是数字或大写字母

我想检查ID是否符合这两种格式中的任何一种,如果不符合,我想重新格式化字符串

一些示例数据:

C-20BV7-U-00
C-20BW5-U-00
C1AWT4-UR-00  <--- wrong format
C-1B8V9-UR-00
C-20BX2-U-00

但是我如何在没有特定替换的情况下将格式更改为我想要的格式,因为我不知道它与使用特定正则表达式替换的格式有什么不同:

In [51]: df['ID'].str.replace(r'^C([^-])', 'C-\\1').replace(r'-U[^A-Z0-9]+', '-U')                           
Out[51]: 
0     C-20BV7-U-00
1     C-20BW5-U-00
2    C-1AWT4-UR-00
3    C-1B8V9-UR-00
4     C-20BX2-U-00
Name: ID, dtype: object

应该用什么格式替换它?这是唯一错误的格式吗?显示其他变体是,可以是大小写C-xxxxx-U-###或C-xxxxx-UX-##,其中x可以是数字或大写字母。基本上,它的数据是用户输入的,我想检查是否有任何输入错误的值如果问题只能是连字符-删除除数字和字母以外的所有字符,并自行设置连字符我理解您的问题,我唯一的评论是最干净的处理方法,如果用户输入与格式不匹配,则验证并拒绝用户输入,而不是接受任何内容并在以后尝试格式化
In [51]: df['ID'].str.replace(r'^C([^-])', 'C-\\1').replace(r'-U[^A-Z0-9]+', '-U')                           
Out[51]: 
0     C-20BV7-U-00
1     C-20BW5-U-00
2    C-1AWT4-UR-00
3    C-1B8V9-UR-00
4     C-20BX2-U-00
Name: ID, dtype: object