代码之家  ›  专栏  ›  技术社区  ›  deltascience

获取字符串python中所有出现的regex

  •  -1
  • deltascience  · 技术社区  · 7 年前

    我想在下面的字符串中找到 TreeModel/Node/Node[1]/Node[4]/Node[1] 这是:

    TreeModel/Node
    TreeModel/Node/Node[1]
    TreeModel/Node/Node[1]/Node[4]
    TreeModel/Node/Node[1]/Node[4]/Node[1]
    

    使用正则表达式 在巨蟒中。这是我尝试的代码:

    string = 'TreeModel/Node/Node[1]/Node[4]/Node[1]'
    pattern = r'.+?Node\[[1-9]\]'
    print re.findall(pattern=pattern,string=string)
    #result : ['TreeModel/Node/Node[1]', '/Node[4]', '/Node[1]']
    #expected result : ['TreeModel/Node', 'TreeModel/Node/Node[1]', 'TreeModel/Node/Node[1]/Node[4]', 'TreeModel/Node/Node[1]/Node[4]/Node[1]']
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   revo shanwije    7 年前

    我对python一点也不在行,但对于regex部分,您在regex下面的字符串的特定结构与每个段匹配:

    /?(?:{[^{}]*})?[^/]+
    

    其中大括号和前面 / 是可选的。它匹配一个斜杠(如果有),然后用大括号括上它们的内容(如果有),然后其余部分直到下一个斜杠。

    python代码(参见live demo here ):

    matches = re.findall(r'/?(?:{[^{}]*})?[^/]+', string)
    output = ''
    for i in range(len(matches)):
      output += matches[i];
      print(output)
    
        2
  •  2
  •   akash karothiya    7 年前

    >>> s = 'TreeModel/Node/Node[1]/Node[4]/Node[1]'
    >>> split_s = s.split('/')
    >>> ['/'.join(split_s[:i]) for i in range(2, len(split_s)+1)]
    ['TreeModel/Node',
     'TreeModel/Node/Node[1]',
     'TreeModel/Node/Node[1]/Node[4]',
     'TreeModel/Node/Node[1]/Node[4]/Node[1]']
    

    您也可以使用regex:

    for i in range(2, s.count('/')+2):
        s_ = '[^/]+/*'
        regex = re.search(r'('+s_*i+')', s).group(0)
        print(regex)
    TreeModel/Node/
    TreeModel/Node/Node[1]/
    TreeModel/Node/Node[1]/Node[4]/
    TreeModel/Node/Node[1]/Node[4]/Node[1]