nfy5191336
nfy5191336
采纳率16.7%
2019-03-29 12:34 阅读 3.2k

python re正则表达式,怎么匹配一段字符中间 的部分,已知头尾

例如:12<34<123456>123512<34<123456>123

需要输出的结果是<>中间的两个 123456

一开始我是这么写的

re.findall(r'<(.*?)>',str)

但是输出的结果是 两个34<123456,

应该怎么写才能正确获取到<>中的数据呢

还试过

r'.*<(.*?)>.*'

但是好像是输出了最后一个123456

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2019-03-29 12:38
    你的意思是尖括号是嵌套的么?那么需要用递归平衡组
    https://blog.csdn.net/zm2714/article/details/7946437
    
    如何把“xx <aa <bbb> <bbb> aa> yy”这样的字符串里,最长的尖括号内的内容捕获出来?
    
    <                 #最外层的左括号
      [^<>]*          #最外层的左括号后面的不是括号的内容
      (
        (
          (?'Open'<)  #碰到了左括号,在黑板上写一个"Open"
          [^<>>]*     #匹配左括号后面的不是括号的内容
        )+
        (
          (?'-Open'>) #碰到了右括号,擦掉一个"Open"
          [^<>]*      #匹配右括号后面不是括号的内容
        )+
      )*
      (?(Open)(?!))   #在遇到最外层的右括号前面,判断黑板上还有没有没擦掉的"Open";如果有,则匹配失败
    >                 #最外层的右括号
    
    (这些作为注释的换行和内容删除)
    
    如果你只要匹配最内侧的,那么可以 re.findall(r'<([^\<\>]*?)>',str)
    
    点赞 1 评论 复制链接分享

相关推荐