简体   繁体   中英

In python how to replace a string placed between string and special character

I wanted to replace the below-highlighted string with just a {. Kindly share your thoughts

Strings between '{' and '}]' has to replaced with {

I have stored to below json to str to perform replace

{'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': {}}

Expected output:

{'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': {}}

I have tried:

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

In brief, ^ matches beginning of line, * matches "zero or more of the previous expression" ie "beginnings of line", though I don't think repetitions of ^ are well-defined. The remainder of the expression just matches literally.

If we can guess what you hoped for it to match, perhaps try

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

{ is a regex metacharacter, so it needs to be backslash-escaped to match literally.

Knowing the full anticipated output makes the question easier to solve. It appears as though you just want a couple of keys from your json/dict.

So if we have:

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': {}
}

and we expect:

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': {}
}

We can test that this simple comprehension does the trick for us:

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 }")

Note that you will also need an:

import json

If you want to do that test above.

Note that if the only key you want is the results key, then all you need is:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM