我有一些看起来像这样的文字,
<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作为块标记
有没有办法
答案 0 :(得分:4)
如果您在单个字符串中阅读文件内容,则可以使用此正则表达式匹配从PIN
到END
的文本块:
^PIN (\S+).*^END \1$
RegEx分手:
^
:开始PIN
:匹配文字文字"PIN "
(\S+)
:匹配1个非空格字符并将其捕获为组#1 .*
:匹配0或更多任何字符^END
:在第一行匹配END
\1
:对组#1的反向引用$
:结束要使用的标志是MULTILINE
和DOTALL
PS:正如cbwheels和Wiktor评论的那样,如果输入文本的大小很大,在这个正则表达式^PIN (\S+).*?^END \1$
中使用延迟量词可能会表现得更好。