regex 在python中找到所有在string中出现的pattern,然后替换

irtuqstp  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(64)

我有一个很大的字符串,我想用另一个字符串替换其中的一个特定子字符串。示例字符串示例:

txt = """{u'lang': u'en_US', u'tz': u'Canada/Eastern', u'uid': 1, u'dashboard_merge_domains_contexts': False,      u'group_by': [], u'params': {u'action': 315}}" domain="[[u'state', u'!=', u'done'], [u'state', u'!=', u'cancel'], [u'state', u'!=', u'draft'],      **[u'location_ids', u'ilike', u'WH07']**, [u'state', u'!=', u'done'], [u'state', u'!=', u'cancel'], [u'state', u'!=', u'draft'],      **[u'location_ids', u'=', u'WH123']**]"""

字符串
我想用一个新的字符串替换所有包含location_ids(突出显示)的方括号。有可能做到吗?我曾想过使用regex,但没有找到任何共同的模式。

a7qyws3x

a7qyws3x1#

下面的代码将字符串转换回Python列表列表,然后解析该列表。

import ast

txt = "{u'lang': u'en_US', u'tz': u'Canada/Eastern', u'uid': 1, u'dashboard_merge_domains_contexts': False, u'group_by': [], u'params': {u'action': 315}}"
domain="[[u'state', u'!=', u'done'], [u'state', u'!=', u'cancel'], [u'state', u'!=', u'draft'], [u'location_ids', u'ilike', u'WH07'], [u'state', u'!=', u'done'], [u'state', u'!=', u'cancel'], [u'state', u'!=', u'draft'], [u'location_ids', u'=', u'WH123']]"

domain = ast.literal_eval(domain)
print(domain)
for a,b,c in domain:
    if a == 'location_ids':
        print("Found", c)

字符串
输出量:

[['state', '!=', 'done'], ['state', '!=', 'cancel'], ['state', '!=', 'draft'], ['location_ids', 'ilike', 'WH07'], ['state', '!=', 'done'], ['state', '!=', 'cancel'], ['state', '!=', 'draft'], ['location_ids', '=', 'WH123']]
Found WH07
Found WH123


如果你想改变它,它会是这样的:

newlist = []
for a,b,c in domain:
    if a == 'location_ids':
        c = c.replace('WH','XX')
    newlist.append([a,b,c])

相关问题