Python 如何更正此正则表达式和函数以验证列值模式的正确性?
我想检查pandas列中的字符串是否遵循特定的模式。我想用一个函数check_模式和一个正则表达式来实现。除前两位后面有破折号外,数据应仅由位数以外的数字组成。正确的值应为08-15643。错误的值可能是07-456d、04-47897-1、084564等。) 请查看数据和我的代码:Python 如何更正此正则表达式和函数以验证列值模式的正确性?,python,regex,pandas,validation,Python,Regex,Pandas,Validation,我想检查pandas列中的字符串是否遵循特定的模式。我想用一个函数check_模式和一个正则表达式来实现。除前两位后面有破折号外,数据应仅由位数以外的数字组成。正确的值应为08-15643。错误的值可能是07-456d、04-47897-1、084564等。) 请查看数据和我的代码: df = pd.DataFrame(str_list) str_list = ['19-123', '08-156445787', '08-156468787-1'] df.rename(columns={df.c
df = pd.DataFrame(str_list)
str_list = ['19-123', '08-156445787', '08-156468787-1']
df.rename(columns={df.columns[0]: "Strings" }, inplace = True)
def check_pattern(Strings):
is_correct_pattern = False
pattern = re.compile("^[0-9]{2}'-'[0-9]")
if pattern.match(Strings) == True:
is_correct_pattern = True
return is_correct_pattern
df['Correct_pattern'] = df['Strings'].apply(lambda x: check_pattern(x))
我的输出应该是原始的dataframe df,并带有一个额外的列更正模式。对于给定的数据df,该列的结果应该是True、True、False。如果您有其他解决此问题的方法,我也很感兴趣:)您想使用它来查看模式是否与字符串匹配:
df['Correct_pattern'] = df['Strings'].str.match(r'^\d{2}-\d+$')
^\d{2}-\d+$
模式匹配字符串的开头(^
,请注意,它与re.match
是冗余的,但最好显式保留锚点),然后是两位数字,-
,然后\d+
匹配任何1+位,然后用$
定位符断言字符串末尾的位置
以str_list=['19-123','08-156445787','08-156468787-1']
作为输入,输出为:
>>> df
Strings Correct_pattern
0 19-123 True
1 08-156445787 True
2 08-156468787-1 False
试试
df['Correct_pattern']=df['Strings'].str.match(r'^\d{2}-\d+$)
yes,太好了。除了我想保留一次错误的记录。我想看看。这个表达式只给我留下了正确的案例。我测试了代码,使用您的输入数据,我得到了正确和错误的结果。好吧,出了点问题。当我清除输出并再次运行它时,它工作了。谢谢!!