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

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

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

一开始我是这么写的

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

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

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

还试过

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

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

1个回答

你的意思是尖括号是嵌套的么?那么需要用递归平衡组
https://blog.csdn.net/zm2714/article/details/7946437

如何把“xx <aa <bbb> <bbb> aa> yy”这样的字符串里,最长的尖括号内的内容捕获出来?

<                 #最外层的左括号
  [^<>]*          #最外层的左括号后面的不是括号的内容
  (
    (
      (?'Open'<)  #碰到了左括号,在黑板上写一个"Open"
      [^<>>]*     #匹配左括号后面的不是括号的内容
    )+
    (
      (?'-Open'>) #碰到了右括号,擦掉一个"Open"
      [^<>]*      #匹配右括号后面不是括号的内容
    )+
  )*
  (?(Open)(?!))   #在遇到最外层的右括号前面,判断黑板上还有没有没擦掉的"Open";如果有,则匹配失败
>                 #最外层的右括号

(这些作为注释的换行和内容删除)

如果你只要匹配最内侧的,那么可以 re.findall(r'<([^\<\>]*?)>',str)
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问