问题描述
我在使用正则表达式时遇到了麻烦。我正在尝试检查数据库是否与我正在使用的项目名称完全匹配。问题是有时数据不完整,我会收到错误消息。我想完全忽略正则表达式,因为此时没有必要。
例如,下面的代码返回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")