使用pandas str.match逃避缺少的括号

问题描述

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

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

有什么主意我该如何绕过这个问题?

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

解决方法

如果我正确理解了您的信息,则您正在尝试使用读取的数据创建正则表达式。由于您不希望将它们视为正则表达式,因此可以只使用字符串比较。

但是,如果您的应用程序需要使用正则表达式,则可以使用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")