nfy5191336 2019-03-29 12:34 采纳率: 16.7%
浏览 3580

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

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

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

一开始我是这么写的

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

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

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

还试过

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

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

  • 写回答

1条回答 默认 最新

  • threenewbee 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)
    
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!