Python 检查列中的字符串是否与两种格式之一匹配,如果不匹配,请重新格式化字符串
我有一列字符串,它们是ID,应该遵循以下格式:C-xxxxx-U-##或C-xxxxx-UX-##,其中x可以是数字或大写字母 我想检查ID是否符合这两种格式中的任何一种,如果不符合,我想重新格式化字符串 一些示例数据: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 但是我如何在没有特定替换的情况下将格式更改为我想要的格式,因为我不知道它与使用特定正则表达式替换的格
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