正则表达式
问题描述:
我想通过正则表达式解析一个特定的字符串到我的oracle表中的列中,并且我在网上的不同示例中感到非常困惑。正则表达式
这是样品字符串我想解析(此字符串是一列有一个值从表raw_string_table
称为raw string
):
Attributes : {}
Body : {
"Type" : "TypeValue",
"MessageId" : "MessageIDValue",
"TopicArn" : "TopicArnValue",
"Message" : "MessageValue",
"Timestamp" : "TimestampValue",
"SignatureVersion" : "SignatureVersionValue",
"Signature" : "SignatureValue",
"SigningCertURL" : "SigningCertURLValue",
"UnsubscribeURL" : "UnsubscribeURLValue"
}
MD5OfBody : MD5OfBodyValue
(缩进增加了可读性)
这是我希望我的结果设置为:
答
最简单的事情是做正则表达式为你想提取每个价值 - 这样你不依赖于排序:
SELECT REGEXP_SUBSTR(RAW_STRING, '"Type".*:.*"(.*)"', 1, 1, NULL, 1) AS TYPE,
REGEXP_SUBSTR(RAW_STRING, '"MessageId".*:.*"(.*)"', 1, 1, NULL, 1) AS MESSAGEID,
REGEXP_SUBSTR(RAW_STRING, '"TopicArn".*:.*"(.*)"', 1, 1, NULL, 1) AS TOPICARN,
REGEXP_SUBSTR(RAW_STRING, '"Message".*:.*"(.*)"', 1, 1, NULL, 1) AS MESSAGE,
REGEXP_SUBSTR(RAW_STRING, '"Timestamp".*:.*"(.*)"', 1, 1, NULL, 1) AS TIMESTAMP,
REGEXP_SUBSTR(RAW_STRING, '"SignatureVersion".*:.*"(.*)"', 1, 1, NULL, 1) AS SIGNATUREVERSION,
REGEXP_SUBSTR(RAW_STRING, '"Signature".*:.*"(.*)"', 1, 1, NULL, 1) AS SIGNATURE,
REGEXP_SUBSTR(RAW_STRING, '"SigningCertURL".*:.*"(.*)"', 1, 1, NULL, 1) AS SIGNINGCERTURL,
REGEXP_SUBSTR(RAW_STRING, '"UnsubscribeURL".*:.*"(.*)"', 1, 1, NULL, 1) AS UNSUBSCRIBEURL
FROM RAW_STRING_TABLE;
好运。
+0
这是我正在寻找的确切的东西。非常感谢! – JHWin21
看起来像正则表达式的坏例子。为什么不从奇数和偶数项目中选择2个列表? – CAustin
看起来像一组键值对。应该用''key1“:”([^“] *)”,“key2”:“([^”] *)“...'等正则表达式匹配和捕获。实际上'Body'看起来像一个json对象。你有任何可用的解析器? – PJProudhon
您可以更改创建字符串的代码,以便使用更类似JSON的标准格式吗?然后你可以使用JSON库来解析它。 – Barmar