代码之家  ›  专栏  ›  技术社区  ›  Jayesh Dhandha

python中字符串的特殊regex

  •  0
  • Jayesh Dhandha  · 技术社区  · 6 年前

    我有一根像下面这样的绳子。

    S=([测试1,测试2;测试3(新)])

    现在我有了一个regex,它将删除括号并将其转换为列表。即使与A、B、C类分开。 正则表达式:

    output = [i for i in re.split(r'\s*[(){}<>\[\],;\'"]\s*', s) if i]
    

    但是这个regex也从列表中删除了括号。( (新) 在我的情况下)

    如何将此regex应用于字符串的开头和结尾。我知道可以用 ^ 但不确定怎么做?

    预期产量

    ['test1'、'test2'、'test3(new)']

    来自上述regex的输出

    ['test1'、'test2'、'test3'、'new']

    有什么帮助吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   SpghttCd    6 年前
    s = '({[test1, test2 ; test3 (New) ]})'
    

    根据您下面的评论,我假设整个字符串的左括号数等于右括号数。

    因此,首先移除外支架需要知道它们的编号:

    m = re.match('[({[]*', s)
    n_brckt = m.span()[1] - m.span()[0]
    

    然后拆下外支架(取决于是否找到任何…):

    if n_brckt > 0:
        s = s[n_brckt:-n_brckt]
    s = s.strip()
    
    In: s
    Out: 'test1, test2 ; test3 (New)'
    

    然后,您可以在所有出现的逗号或冒号处进行拆分,可以选择后面跟一个空格:

    In: re.split('[,;]+ *', s)
    Out: ['test1', 'test2', 'test3 (New)']
    
        2
  •  1
  •   Rakesh    6 年前

    使用 re.search

    import re
    s = "({[test1, test2 ; test3 (New) ]})"
    m = re.search("\[(.*?)\]", s)
    if m:
        #print(m.group(1).replace(";", ",").split(",")) 
        print([i.strip() for i in m.group(1).replace(";", ",").split(",")])
    

    输出:

    ['test1', 'test2', 'test3 (New)']