当前位置: 首页 > 知识库问答 >
问题:

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

郎鸿朗
2023-03-14

我想检查我的pandas列中的字符串是否遵循特定模式。我想用一个函数check\u模式和一个正则表达式来实现。除前两位后面有一个破折号外,数据只能由位数以外的数字组成。正确值为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))

我的输出应该是原始的数据帧df,带有一个额外的列Correct\u模式。给定数据df后,该列的结果应为True、True、False。如果你有解决这个问题的其他想法,我也很感兴趣:)

共有1个答案

丌官和泰
2023-03-14

您想使用Series.str.match方法查看模式是否与字符串匹配:

df['Correct_pattern'] = df['Strings'].str.match(r'^\d{2}-\d+$')

模式匹配字符串的开头(^code>,请注意,它与重新匹配是冗余的,但最好显式保留锚点),然后是两个数字,-,然后与任何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

 类似资料:
  • 问题内容: 我想在PHP中测试正则表达式的有效性,最好在使用前进行测试。这样做的唯一方法是实际尝试a 并查看是否返回吗? 有没有更简单/正确的方法来测试有效的正则表达式? 问题答案: 正如用户 pozs 所说,还应 考虑在测试环境中 放在 preg_match() () 前面, 以防止发出警告或通知。 要验证RegExp只需对其运行 (无需知道您要预先测试的数据) 。如果返回显式false(),则

  • 问题内容: 我正在寻找允许我验证json的正则表达式。 我对Regex非常陌生,我知道使用Regex进行解析很不好,但是可以用来验证吗? 问题答案: 是的,可以进行完整的正则表达式验证。 大多数现代正则表达式实现都允许递归正则表达式,该正则表达式可以验证完整的JSON序列化结构。该json.org规范使得它非常简单。 它具有PCRE功能,在PHP中效果很好。应该在Perl中保持不变;并且可以肯定地

  • 主要内容:标签属性,JSF验证整数范围实例标签用于将字符串值验证为所需格式。 以下代码显示如何使用标记。 标签属性 属性 说明 pattern 格式化模式 JSF验证整数范围实例 打开 NetBeans IDE 创建一个Web工程:ValidateRegularExpression,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文件:result.xhtml 的代码内容如下所示 - 文件:

  • 我有以下用于javascript密码验证的正则表达式: 正则表达式规则是: 12-25个字符 至少有一个大写字母 至少有一个小写字母 至少有一个数字 至少有一个特殊字符:!#$%()*,-./:;=?@[]^ `{124;}~ 然而,正则表达式似乎不起作用。它匹配任何字符。我该怎么解决这个问题?

  • 我正在尝试使用python中的正则表达式。我构建了正则表达式,如下所示。我知道用于匹配搜索字符串的开头。我已使用包含多个的匹配模式构建框架,但我不确定将如何尝试匹配搜索字符串中的模式。 我预计会引发错误,关于无效的正则表达式,但它不会引发任何错误,也不会返回任何匹配项。 所以,我的问题是或是有效的正则表达式吗?

  • 我需要编写一个具有以下规则的正则表达式: null null 这些示例无效: > 12--11(因为它包含两个连字符) 1-2345(因为它包含5号) <>是字符出现在最后一个位置,那么在字符之前必须有一个数字not hypen。 即11-A(必须不及格)11-1A(必须及格)