我对于每一行都有一个长表达式,表达式的长度是变化的,'item id'是不同的,并且顺序也不相同。我知道一种做子字符串的方法,但是我不知道如何获得想要的结果。能否请你帮忙?预先感谢。
表格:
第1行:
<?xml version = '1.0'?>
<Data>
<Item id="DDD">
<!±DATA±444»»>
</Item>
<Item id="BBB">
<!±DATA±222»»>
</Item>
<Item id="CCC">
<!±DATA±333»»>
</Item>
...
</Data>
第2行:
<?xml version = '1.0'?><Data><Item id="BBB"><!±DATA±022»»></Item><Item id="CCC"><!±DATA±033»»></Item><Item id="DDD"><!±DATA±044»»></Item>…<Item id="AAA"><!±DATA±011»»></Item>….</Item></Data>
第3行:
<?xml version = '1.0'?><Data><Item id="AAA"><!±DATA±001»»></Item><Item id="EEE"><!±DATA±005»»></Item><Item id="DDD"><!±DATA±044»»></Item>…<Item id="CCC"><!±DATA±003»»></Item>….</Item></Data>
所需结果:
ID AAA BBB CCC DDD EEE ...
1 222 333 444 ...
2 011 022 033 044 ...
3 001 003 044 005 ...
... ... ... ... ... ... ...
答案 0 :(得分:1)
您可以为每个列应用RegEx:
RegExp_Substr(x,'<Item id="AAA">\s*<!±DATA±\K.+?(?=»»>)', 1,1,'i') AS AAA,
RegExp_Substr(x,'<Item id="BBB">\s*<!±DATA±\K.+?(?=»»>)', 1,1,'i') AS BBB,
...
它将查找完全匹配的<Item id="AAA">
,后跟任何空格字符,后跟*<!±DATA±
,然后提取以下字符,直到»»>
。