Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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_Regex_Pandas_Validation - Fatal编程技术网

Python 如何更正此正则表达式和函数以验证列值模式的正确性?

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

我想检查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.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,太好了。除了我想保留一次错误的记录。我想看看。这个表达式只给我留下了正确的案例。我测试了代码,使用您的输入数据,我得到了正确和错误的结果。好吧,出了点问题。当我清除输出并再次运行它时,它工作了。谢谢!!