首页 > 解决方案 > 使用 pandas str.match 转义缺少的括号

问题描述

我在使用正则表达式时遇到问题。我正在尝试检查我的数据库是否与我正在使用的项目名称完全匹配。问题是有时数据不完整,我会得到错误。我想完全忽略正则表达式,因为此时没有必要。

例如,下面的代码返回re.error: missing ), unterminated subpattern at position 10列表中的最后一项缺少括号。我尝试过使用if database['Item Name'].str.match(item, regex=False).any():,但这还不够,因为这些项目的命名非常相似,我需要完美匹配。我也尝试阅读 re 模块文档,但我对它的理解不够好,无法解决这个问题。

有什么想法可以绕过这个问题吗?

database = pd.read_csv("database.csv", sep=";")

list = ["Test Name !", "Test Name (2020)", "Test name ("]

for item in list:
    if database['Item Name'].str.match(item).any():
        # do something
        pass
    else:
        #do something else
        pass

标签: pythonpandasmatch

解决方案


如果我正确理解您的帖子,您正在尝试使用读取的数据来创建正则表达式。由于您不希望将这些视为正则表达式,因此您可以简单地使用字符串比较。

但是,如果您的应用程序需要使用正则表达式,您可以使用 re.escape() 将字符串呈现为文字,这样括号就不会变魔术。

例如:

import re
string1 = 'this is a magic ( that will break your regex'
string2 = re.escape(string1)  # escapes your string

re.match(string2, "this won't cause issues")
#re.match(string1, "this will cause issues")

推荐阅读