我的文件包含多个math
标签,如下所示:
<Math
<Unique 262963>
<BRect 1.02176" 0.09096" 1.86024" 0.40658">
<MathFullForm `equal[therefore[char[tau]],plus[indexes[0,1,char[tau],char[c]],minus[times[indexes[
0,1,char[tau],char[s]],string[" and "],over[times[char[d],char[omega]],times[char[
d],char[t]]]]]],over[char[tau],char[I]]]'
> # end of MathFullForm
<MathLineBreak 138.88883">
<MathOrigin 1.95188" 0.32125">
<MathAlignment Center>
<MathSize MathMedium>
> # end of Math
就像这样:
<Math
<Unique 87795>
<Separation 0>
<ObColor `Black'>
<RunaroundGap 0.0 pt>
<BRect 0.01389" 0.01389" 0.17519" 0.22013">
<MathFullForm `indexes[0,1,char[m,0,0,1,0,0],char[i]]'
> # end of MathFullForm
我想提取Unique
代码和MathFullForm
代码的内容,但我对如何执行此操作感到茫然。请注意,Unique
标记之外的Math
标记存在于文件的其他位置。
我尝试过使用正则表达式,但是效果不好而且错过了很多标签。然后我考虑使用XML解析器,但这不起作用,因为代码不是有效的XML。
任何人都可以引导我朝着正确的方向在Python中执行此操作(可以使用正则表达式解决方案)。
答案 0 :(得分:1)
您可以使用循环删除标记。 re.finditer()
可用于迭代提取标签。
检查以下代码,看看它是否适合您。
text = re.sub(r'\r|\n',' ',text)
for m in re.finditer(r'(\<Unique\s).*?\>',text):
print m.group()
for m in re.finditer(r'(\<MathFullForm\s).*?\>',text):
print m.group()
答案 1 :(得分:0)
您可以使用此正则表达式,指定<form #myForm="ngForm" ngNativeValidate (ngSubmit)="addVisitor()">
<div class="ui-input-group">
<input #model="ngModel" type="text" class="form-control" required
placeholder="Name*" name="visitorName" [(ngModel)]="visitorName">
</div>
<button type="submit">Submit</button>
</form>
标记(否则DOTALL
也不会与.
匹配):
\n
第一个捕获组说明匹配是属于<(Unique|MathFullForm)(.*?)>
还是Unique
标记,而在第二个捕获组中,您可以找到标记的内容。
答案 2 :(得分:0)
我通过使用以下正则表达式找到了解决方案:
<Math\s*<Unique[^>]*>\s*(?:<Separation[^>]*>)*\s*(?:<ObColor[^>]*>)*\s*(?:<RunaroundGap[^>]*>)*\s*<BRect[^>]*>\s*<MathFullForm `[^']*'
这匹配整个标记,因此我可以使用另外两个正则表达式来提取必要的信息。