【问题标题】:In python how to replace a string placed between string and special character在python中如何替换放置在字符串和特殊字符之间的字符串
【发布时间】:2021-08-24 16:50:02
【问题描述】:

我想用一个 { 替换下面突出显示的字符串。欢迎分享你的想法

'{' 和 '}]' 之间的字符串必须替换为 {

我已经存储到下面的 json 到 str 来执行替换

{'preview': False, 'init_offset': 0, 'messages': [], 'fields': [{'name': 'dxx.jxx.lxx.sxx'}, {'name': 'dxxx.jxxx.operationName'}, {'name': 'dxxx.jxxx.txxx'}, {'name': 'dxxx.jxxx.log.payload.status'}], 'results': [{'dxxx.jxxx.log.startTime': '2021-06-07T05:44:46.817Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '87', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-06T22:29:28.966Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '56772655863572929', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-05T20:21:30.062Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '43', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-04T03:05:24.848Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '54', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-04T03:05:23.610Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '53', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-03T07:33:00.594Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '23', 'dxxx.jxxx.log.payload.status': '200'}], 'highlighted': {}}

预期输出:

{'results': [{'dxxx.jxxx.log.startTime': '2021-06-07T05:44:46.817Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '87', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-06T22:29:28.966Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '56772655863572929', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-05T20:21:30.062Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '43', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-04T03:05:24.848Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '54', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-04T03:05:23.610Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '53', 'dxxx.jxxx.log.payload.status': '200'}, {'dxxx.jxxx.log.startTime': '2021-06-03T07:33:00.594Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '23', 'dxxx.jxxx.log.payload.status': '200'}], 'highlighted': {}}

我试过了:

s = re.sub('^*}], ', '{', s)
print(s)

【问题讨论】:

  • 您能添加任何示例代码吗?
  • @RubénPozo,下面是我试过的代码。谢谢 ! s = re.sub('^*}], ', '{', s) 打印 s
  • 出于好奇,您希望{'results': } 做什么?
  • re.sub('^.*}], ', '{', s) 请注意正则表达式中^ 后面的.^ 匹配字符串开始。 ^*invalid regex,因为在同一个字符串中不能有多个字符串开头。 . 给了 * 一些可以量化的东西,so it works
  • 您希望得到什么确切的输出?由于 { 'results': } 既不是有效的 json 也不是有效的 ast,我想知道你打算用它做什么。如果您只是省略了一堆实际结果,那么可能有一些简单的方法可以使用 astjson 来为您提供所需的结果。

标签: python python-3.x string replace


【解决方案1】:

简而言之,^ 匹配行首,* 匹配“前一个表达式的零个或多个”,即“行的开头”,尽管我不认为 ^ 的重复是明确定义的。表达式的其余部分仅按字面意思匹配。

如果我们能猜出您希望它匹配的内容,或许可以尝试

s = re.sub(r'^\{.*}], ', '{', s)

{ 是一个正则表达式元字符,因此需要反斜杠转义才能匹配字面意思。

【讨论】:

  • 感谢您的回复。我的错,在问题下,我在“原始数据”下包含了完整的数据。当我添加并执行“s = re.sub(r'^\{.*}], ', '{', s) ",我得到的输出是 {'highlighted': {}} 那是因为,有问题的是,我在结果下没有完整的数据
  • 在这种情况下,正确的解决方案是接受一个能够解决您的实际问题的答案,如果您仍然需要帮助,请发布一个具有您真正需求的新问题。编辑问题以使现有答案无效是不可接受的。
【解决方案2】:

了解完整的预期输出会使问题更容易解决。似乎您只需要 json/dict 中的几个键。

如果我们有:

data_in = {
    'preview': False,
    'init_offset': 0,
    'messages': [],
    'fields': [
        {'name': 'dxx.jxx.lxx.sxx'},
        {'name': 'dxxx.jxxx.operationName'},
        {'name': 'dxxx.jxxx.txxx'},
        {'name': 'dxxx.jxxx.log.payload.status'}
    ],
    'results': [
        {'dxxx.jxxx.log.startTime': '2021-06-07T05:44:46.817Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '87', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-06T22:29:28.966Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '56772655863572929', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-05T20:21:30.062Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '43', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-04T03:05:24.848Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '54', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-04T03:05:23.610Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '53', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-03T07:33:00.594Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '23', 'dxxx.jxxx.log.payload.status': '200'}
    ],
    'highlighted': {}
}

我们期望:

data_expected = {
    'results': [
        {'dxxx.jxxx.log.startTime': '2021-06-07T05:44:46.817Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '87', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-06T22:29:28.966Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '56772655863572929', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-05T20:21:30.062Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '43', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-04T03:05:24.848Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '54', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-04T03:05:23.610Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '53', 'dxxx.jxxx.log.payload.status': '200'},
        {'dxxx.jxxx.log.startTime': '2021-06-03T07:33:00.594Z', 'dxxx.jxxx.operationName': 'testops', 'dxxx.jxxx.txxx': '23', 'dxxx.jxxx.log.payload.status': '200'}
    ],
    'highlighted': {}
}

我们可以测试这个简单的理解是否对我们有用:

data_out = {key:value for key, value in data_in.items() if key in ("results", "highlighted")}
isMatching = json.dumps(data_expected) == json.dumps(data_out)
print(f"data_out matches data_expected: { isMatching }")

请注意,您还需要:

import json

如果你想在上面做那个测试。

请注意,如果您想要的 only 键是 results 键,那么您只需要:

data_out = {"results": [item for item in data_in["results"]]}

【讨论】:

    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 2014-07-22
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2011-05-16
    • 2014-12-07
    相关资源
    最近更新 更多