![](/img/trans.png)
[英]Matching n number of lines in text to a regex any order using python
[英]How to match 5 lines of text in any order using python regex?
我正在尝试编写一个正则表达式来匹配 XML 中的以下 6 行。
string = '''[<Parameter name="Number of steps" type="unsignedInteger" value="10"/>
<Parameter name="Type" type="unsignedInteger" value="1"/>
<Parameter name="Object" type="cn" value="CN=Root,Model=New Model,Vector=Reactions[v1],ParameterGroup=Parameters,Parameter=Kcat,Reference=Value"/>
<Parameter name="Minimum" type="float" value="216.862"/>
<Parameter name="Maximum" type="float" value="867.448"/>
<Parameter name="log" type="bool" value="1"/>]*'''
我需要匹配所有 6 行,但以任何顺序,因为编写它的程序似乎有时会改变哪行去哪里。
我正在尝试以下代码:
import re
re.findall(''' <Parameter name="Number of steps" type="unsignedInteger" value="10"/>
<Parameter name="Type" type="unsignedInteger" value="1"/>
<Parameter name="Object" type="cn" value="CN=Root,Model=New Model,Vector=Reactions[v1],ParameterGroup=Parameters,Parameter=Kcat,Reference=Value"/>
<Parameter name="Minimum" type="float" value="216.862"/>
<Parameter name="Maximum" type="float" value="867.448"/>
<Parameter name="log" type="bool" value="1"/>''',string)
但它不起作用。 有人知道如何解决我的问题吗?
- - - - - - 编辑 - - - - - - - - - - - -
更具体地说,我有很多 XMl,我正在阅读它们作为文本,我需要使用正则表达式提取一些信息。
scan_parameters=re.findall(''' <Task key="(.*)" name="Scan" type="scan" scheduled="true" updateModel="false">
<Report reference="(.*)" target="(.*)" append="0" confirmOverwrite="0"/>
<Problem>
<Parameter name="Subtask" type="unsignedInteger" value="5"/>
<ParameterGroup name="ScanItems">
<ParameterGroup name="ScanItem">
(<Parameter name="Maximum" type="float" value="(.*)"/>|
<Parameter name="Minimum" type="float" value="(.*)"/>|
<Parameter name="Number of steps" type="unsignedInteger" value="10"/>|
<Parameter name="Object" type="cn" value="CN=Root,Model=(.*),Vector=Reactions\[(.*)\],ParameterGroup=Parameters,Parameter=(.*),Reference=Value"/>|
<Parameter name="Type" type="unsignedInteger" value="1"/>|
<Parameter name="log" type="bool" value="1"/>){6}
</ParameterGroup>
</ParameterGroup>''',copasiML_original)
我需要它来返回一个包含 (.*) 中的值的列表。
如果您确实需要使用正则表达式执行这些操作,则可以使用积极展望,如下所示:
(?=.*\[<Parameter name="Number of steps" type="unsignedInteger" value="10"/>)(?=.*<Parameter name="Type" type="unsignedInteger" value="1"/>)(?=.*<Parameter name="Object" type="cn" value="CN=Root,Model=New Model,Vector=Reactions\[v1\],ParameterGroup=Parameters,Parameter=Kcat,Reference=Value"/>)(?=.*<Parameter name="Minimum" type="float" value="216.862"/>)(?=.*<Parameter name="Maximum" type="float" value="867.448"/>)(?=.*<Parameter name="log" type="bool" value="1"/>\]\*)
但是,请注意,如果每个语句之间有任何换行符,则这将不匹配。 如果它们之间有换行符,请将(?=.*
替换为(?=[.\\s]*
否则您可以在将换行符传递到匹配之前删除换行符
如果您不在乎它们是重复的还是有一些缺失——只要有五个连续匹配:
/(text1|text2|text3|text4|text5){5}/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.