匹配文本块

时间:2017-12-19 18:51:29

标签: python regex python-3.x

我有一些看起来像这样的文字,

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="container">
    <nav class="navbar navbar-default navbar-fixed-top">
        <div class="container-fluid">
            <div class="navbar-header ">                  
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbarNav">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
            </div>

            <div id="navbarNav" class="navbar-collapse collapse ">
                <br/><br/>
                <ul class="nav navbar-nav navbar-right ">
                    <li><a href="#">ABOUT</a></li>
                    <li><a href="#">SERVICES</a></li>
                    <li><a href="#">CONTACT</a></li>
                    <li><a href="#">CALCULATORS</a></li>
                </ul>
            </div> 
        </div>
    </nav>
    
    <div id="page">
      Page Top
      <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
      <div id="startchange">Start Change Div</div>
      <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
      Page Bottom
    </div>
</div>

我需要提取存在于PIN xxx和END xxx之间的PIN定义块。我试图用正则表达式解析文本文件,我没有得到所需的结果,因为我有嵌套的END语句。

PIN ABC
  DIRECTION IN;
  PORT
    RECT 10 20 20 40;
  END
END ABC

PIN ABC2
  DIRECTION OUT;
  PORT
    RECT 10 20 20 40;
  END
END ABC2

我真的需要搜索PIN xxx和END xxx作为块标记

有没有办法

1 个答案:

答案 0 :(得分:4)

如果您在单个字符串中阅读文件内容,则可以使用此正则表达式匹配从PINEND的文本块:

^PIN (\S+).*^END \1$

RegEx Demo

RegEx分手:

  • ^:开始
  • PIN:匹配文字文字"PIN "
  • (\S+):匹配1个非空格字符并将其捕获为组#1
  • .*:匹配0或更多任何字符
  • ^END:在第一行匹配END
  • \1:对组#1的反向引用
  • $:结束

要使用的标志是MULTILINEDOTALL

PS:正如cbwheels和Wiktor评论的那样,如果输入文本的大小很大,在这个正则表达式^PIN (\S+).*?^END \1$中使用延迟量词可能会表现得更好。