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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查列中的字符串是否匹配两种格式之一,如果不重新设置字符串格式相关的知识,希望对你有一定的参考价值。

我有一列字符串,这些ID是应该遵循以下格式的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

我认为这会给我不遵循该格式的行

result=df["ID"].str.match(pat='C-[A-Z0-9]{5}-U[A-Z0-9]{0,1}-[0-9]{2}$')
temp=df.loc[~result,"ID"]

但是我如何将格式更改为我想要的格式而没有特定的替换,因为我不知道它与格式会有什么不同

答案

使用特定的正则表达式替换:

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

以上是关于检查列中的字符串是否匹配两种格式之一,如果不重新设置字符串格式的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串是不是匹配数组中的正则表达式之一?

如何将整个字符串匹配为具有单个正则表达式的两种格式之一?

VBA for Excel - 如果更深的选择案例不匹配标准,请再次避免输入代码

检查列中的单词是不是与字典中的单词匹配

kmp算法字符串匹配算法

用于以任何出现顺序匹配具有多个单词的列中的字符串的 Coredata 谓词