从字符串中动态删除子字符串

Posted

技术标签:

【中文标题】从字符串中动态删除子字符串【英文标题】:Dynamically remove substring from string 【发布时间】:2021-05-30 22:52:39 【问题描述】:

我有一个有点直截了当的困境,但我无法找到解决方案。

我从 MongoDB 数据库中获取一个 JSON 文件并使用json.dumps 将其转换为字符串:

client = MongoClient("XXXX")
db = client.testdb
table = db.testingtable
document = table.find()
document = list(document)
docs = json.dumps(document,default=str)
print(docs)

电流输出:

["_id": "67", "userId": 167, "productID": "Reference('product_id', ObjectId('5f4523b893d7b757bcbd2d71'))"]

我将如何动态在整个字符串中搜索单词Reference,如果找到,它应该删除除了括号内的字母数字值之外的所有内容没有这样做:

docs.replace("Reference('product_id', ObjectId('",'').replace("'))",'')

预期输出:

["_id": "67", "userId": 167, "productID": "5f4523b893d7b757bcbd2d71"]

【问题讨论】:

【参考方案1】:
from pandas.io.json import json_normalize
df=pd.json_normalize(["_id": "67", "userId": 167, "productID": "Reference('product_id', ObjectId('5f4523b893d7b757bcbd2d71'))"])#convert to df


#Using regex, extract string between `ObjectId(`and  `)` and turn it back to json
df.assign(productID=df.productID.str.extract('(?<=ObjectId\()(.*?)(?=\))')).to_json(orient="records")


["_id":"67","userId":167,"productID":"'5f4523b893d7b757bcbd2d71'"]

【讨论】:

这是一个很好的解决方案,但是,我会说它是部分动态的,因为它假定 objectId 将始终驻留在 productId 列中,因此如果 objectId 在例如userId 列不起作用

以上是关于从字符串中动态删除子字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 的字符串子序列内核和 SVM

华为OD机试真题Java实现判断字符串子序列真题+解题思路+代码(2022&2023)

从字符串中动态删除子字符串

2022华为机试真题 C++ 实现 字符串子序列II

如何更改python字符串子字符串信息

[在python中使用正则表达式搜索字符串子字符串