gpt4 book ai didi

使用字典的 Python 正则表达式替换

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:23 27 4
gpt4 key购买 nike

我有以下正则表达式来解析括号内的访问字符串并删除它们:

>>> a = 'a[b]cdef[g ]hi[ j]klmno[ p ]'
>>> re.sub(r'\[\s?(.*?)\s?\]',r'\1',a)
'abcdefghijklmnop'

但我想做的是让括号中的内容指向字典。假设我有以下字典:

d = {'b':2,'g':7,'j':10,'p':16}

当我运行我想要的正则表达式时,它应该打印字符串:'a2cdef7hi10klmno16'

但是,我不能简单地让 sub 的替换部分成为 d['\1'] 因为会有一个 KeyError: '\x01'

有没有什么简单的方法可以用响应正则表达式捕获的字典替换模式?

最佳答案

您可以使用 format ,假设 a 不包含 {...} 形式的子字符串:

>>> import re
>>> a = 'a[b]cdef[g ]hi[ j]klmno[ p ]'
>>> d = {'b':2,'g':7,'j':10,'p':16}
>>>
>>> re.sub(r'\[\s?(.*?)\s?\]',r'{\1}',a).format(**d)
'a2cdef7hi10klmno16'

或者您可以使用 lambda:

>>> re.sub(r'\[\s?(.*?)\s?\]', lambda m: str(d[m.group(1)]), a)
'a2cdef7hi10klmno16'

lambda 解决方案似乎要快得多:

>>> from timeit import timeit
>>>
>>> setup = """
... import re
... a = 'a[b]cdef[g ]hi[ j]klmno[ p ]'
... d = {'b':2,'g':7,'j':10,'p':16}
... """
>>>
>>> timeit(r"re.sub(r'\[\s?(.*?)\s?\]',r'{\1}',a).format(**d)", setup)
13.796708106994629
>>> timeit(r"re.sub(r'\[\s?(.*?)\s?\]', lambda m: str(d[m.group(1)]), a)", setup)
6.593755006790161

关于使用字典的 Python 正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18177900/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com