Django 查找并删除/替换较大字符串的一部分
问题描述
在我的Python/Django项目中,我想编写一个自定义的异常类,在此类中,我想避免向最终用户显示一些内容。
在下面的错误消息中,如果您看到项目名称 prj-eng-d-nc-prcd-1077
出现。我希望在消息传递给用户界面之前将其删除。
我尝试过查找和替换。例如:
prj_name = 'prj-eng'
if prj_name in msg:
msg = msg.replace(prj_name, '')
print (msg)
但这里的问题是项目名称是动态的。它可以是 prj-eng-h-nc-raw-1637
或者 prj-eng-p-nc-oauth-2218
。
我还尝试使用rfind()方法来查找子字符串的起始位置并替换,但没有帮助。
请问有人可以帮我解决这个问题吗?
{
"jobs": [],
"error": "Unable to process the request",
"msg": "400 Bad int64 value: prj-eng-d-nc-prcd-1077\n\nLocation: us-central1\nJob ID: f8fc4fde-280b-4f35-ae9e-5fb92d2d0873\n"
}
输入将是:
msg = "400 Bad int64 value: prj-eng-d-nc-prcd-1077\n\nLocation: us-central1\nJob ID: f8fc4fde-280b-4f35-ae9e-5fb92d2d0873\n"
输出应为:
msg = "400 Bad int64 value: \n\nLocation: us-central1\nJob ID: f8fc4fde-280b-4f35-ae9e-5fb92d2d0873\n"
解决方案
要从自定义异常类的字符串中删除动态子字符串,您可以使用正则表达式匹配子字符串,并用空字符串替换它。
import re
class CustomException(Exception):
def __init__(self, msg):
# Remove project name from error message
project_name_pattern = r'prj-eng(-\w+)*-\d+'
self.msg = re.sub(project_name_pattern, '', msg)
#Example try: raise CustomException(‘400 Bad int64 value: prj-eng-d-nc-prcd-1077\n\nLocation: us-central1\nJob ID: f8fc4fde-280b-4f35-ae9e-5fb92d2d0873\n’) except CustomException as e: print(e.msg)