'<twaver v=''TWaver Java To Flex Version 1.0'' p=''flex''>
<dataBox type=''twaver.ElementBox''>
<layerBox>
<layer name=''default'' visible=''true'' editable=''true'' movable=''true''/>
<layer id=''equipLayer'' name=''equipLayer'' visible=''true'' editable=''true'' movable=''true''/>
<layer id=''labelLayer'' name=''labelLayer'' visible=''true'' editable=''true'' movable=''false''/>
<layer id=''linkLayer'' name=''linkLayer'' visible=''true'' editable=''true'' movable=''true''/>
<layer id=''portLayer'' name=''portLayer'' visible=''true'' editable=''true'' movable=''true''/>
</layerBox>
</dataBox>
<data type=''twaver.Node'' ref=''0'' id=''AD5FFEC7-904B-4CC1-83FC-E25F7F67125E-00030''>
</twaver>'
匹配模式就直接'<twaver.*?</twaver>'
就好,中间.*
用非贪婪匹配
注:要是学过编译原理就知道,正则无法匹配成对的多层级元素,也就是说使用正则就要求字符串中标签是并列的,不能有嵌套发生
import re
string = '''
'<twaver v=''TWaver Java To Flex Version 1.0'' p=''flex''>
<dataBox type=''twaver.ElementBox''>
<layerBox>
<layer name=''default'' visible=''true'' editable=''true'' movable=''true''/>
<layer id=''equipLayer'' name=''equipLayer'' visible=''true'' editable=''true'' movable=''true''/>
<layer id=''labelLayer'' name=''labelLayer'' visible=''true'' editable=''true'' movable=''false''/>
<layer id=''linkLayer'' name=''linkLayer'' visible=''true'' editable=''true'' movable=''true''/>
<layer id=''portLayer'' name=''portLayer'' visible=''true'' editable=''true'' movable=''true''/>
</layerBox>
</dataBox>
<data type=''twaver.Node'' ref=''0'' id=''AD5FFEC7-904B-4CC1-83FC-E25F7F67125E-00030''>
</twaver>'
'''
obj = re.findall("'<twaver.*?</twaver>'", string, re.S | re.M)
print(obj)
re.compile(r'\'<twaver.*?>.*?</twaver>\'', re.S)
import re
pattern = re.complie('\'<twaver(.*?)</twaver>\'',re.S)
result = pattern.findall(text)
不要再用网站测试,网站无法表达Python中的正则匹配标识符,直接使用Python解释器测试。既然你需要使用Python,那么就应当在Python解释器的环境下使用正则匹配。
下面的代码就是正解,前几位回答者也是对的。
import re
t='''<twaver v=''TWaver Java To Flex Version 1.0'' p=''flex''>
<dataBox type=''twaver.ElementBox''>
<layerBox>
<layer name=''default'' visible=''true'' editable=''true'' movable=''true''/>
<layer id=''equipLayer'' name=''equipLayer'' visible=''true'' editable=''true'' movable=''true''/>
<layer id=''labelLayer'' name=''labelLayer'' visible=''true'' editable=''true'' movable=''false''/>
<layer id=''linkLayer'' name=''linkLayer'' visible=''true'' editable=''true'' movable=''true''/>
<layer id=''portLayer'' name=''portLayer'' visible=''true'' editable=''true'' movable=''true''/>
</layerBox>
</dataBox>
<data type=''twaver.Node'' ref=''0'' id=''AD5FFEC7-904B-4CC1-83FC-E25F7F67125E-00030''>
</twaver>'''
pattern = re.compile('<twaver(.*?)</twaver>',re.S)
result = pattern.findall(t)
print(result)