繁体   English   中英

在python中,如何使用正则表达式将方括号替换为括号

[英]In python, how can I use regex to replace square bracket with parentheses

我有一个清单: list = [1,2,3] 我想将其转换为带括号的字符串: string = (1,2,3)

目前我正在使用字符串替换string = str(list).replace('[','(').replace(']',')') 但我认为使用regex.sub有更好的方法。 但我不知道该怎么做。 非常感谢

如果确实有一个列表,那么:

>>> s  = [1,2,3]
>>> str(tuple(s))
'(1, 2, 3)'

你可以使用string.maketrans而不是-我敢打赌,它的运行速度比序列更快str.replace ,并能更好地伸缩更单个字符替换。

>>> import string
>>> table = string.maketrans('[]','()')
>>> s = "[1, 2, 3, 4]"
>>> s.translate(table)
'(1, 2, 3, 4)'

您甚至可以通过将可选的第二个参数传递给str.translate来使用它来删除原始字符串中的字符:

>>> s = str(['1','2'])
>>> s
"['1', '2']"
>>> s.translate(table,"'")
'(1, 2)'

在python3.x中,字符串模块消失了,您可以通过str builtin访问maketrans

table = str.maketrans('[]','()')

str([1,2,3]).replace('[','(').replace(']',')')

应该对你有用,据我所知它是向前和向后兼容的。

就可重用性而言,您可以将以下函数用于多种不同类型的字符串,以更改它们的开始和结束内容:

def change(str_obj,start,end):
    if isinstance(str_obj,str) and isinstance(start,str) and isinstance(end,str):
        pass
    else:
        raise Exception("Error, expecting a 'str' objects, got %s." % ",".join(str(type(x)) for x in [str_obj,start,end]))
    if len(str_obj)>=2:
        temp=list(str_obj)
        temp[0]=start
        temp[len(str_obj)-1]=end
        return "".join(temp)
    else:
         raise Exception("Error, string size must be greater than or equal to 2. Got a length of: %s" % len(str_obj))

正如所有答案所证明的那样,有十亿种方法可以做到这一点。 这是另一个:

my_list = [1,2,3]
my_str = "(%s)" % str(my_list).strip('[]')

或使其可回收:

list_in_parens = lambda l: "(%s)" % str(l).strip('[]')
my_str = list_in_parens(my_list)

尝试这个:

'({0})'.format(', '.join(str(x) for x in list))

顺便说一句,命名自己的变量list不是一个好主意,因为它与内置函数冲突。 string也可能与同名模块冲突。

如果你真的想使用正则表达式,我想这会起作用。 但其他发布的解决方案可能更有效和/或更易于使用。

import re

string = str(list)
re.sub(r"[\[]", "(", string)
re.sub(r"[\]]", ")", string)

@mgilson你的意思是这样的吗?

def replace_stuff(string):
    string_list = list(string)
    pattern = re.compile(r"[\[\]]")
    result = re.match(pattern, string)
    for i in range(len(result.groups())):
        bracket = result.group(i)
        index = bracket.start()
        print(index)
        if bracket == "[":
            string_list[index] = "("
        else:
            string_list[index] = ")"

    return str(string_list)

由于某些原因len(result.groups())始终为0,即使正则表达式应该找到匹配,它也不能正常工作。 所以无法测试这是否更快,但因为我无法让它工作我无法测试它。 我现在必须上床睡觉,所以如果有人可以解决这个问题,请继续。

所有你需要的是:

"(" + strng.strip('[]') + ")"

它适用于单元素和多元素列表。

>>> lst = [1,2,3]
>>> strng = str(lst)
>>> "(" + strng.strip('[]') + ")"
'(1, 2, 3)'


>>> lst = [1]
>>> strng = str(lst)
>>> "(" + strng.strip('[]') + ")"
'(1)'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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