【问题标题】:Need some guidance in regular expressions substring在正则表达式子字符串中需要一些指导
【发布时间】:2021-01-27 20:22:18
【问题描述】:

三个字符串示例:(数据存储在名为a.metadata的列中)

anything_before"subjectareas":[{"name":"\"I NEED THIS1\""anything_after

anything_before"subjectareas":[{"displayName":"whatever","name":"\"I NEED THIS2\""anything_after

anything_before"subjectareas":[{"displayName":"whatever -whatever","name":"\"I NEED THIS3\""anything_after

我的输出应该是:

我需要这个1

我需要这个2

我需要这个3

subjectareasnamedisplayName这些词可以用在逻辑和区分大小写的表达式中。

我尝试了各种方法,包括下面的这个,但我无法让它发挥作用。 regexp_substr(a.metadata, '[^"subjectareas"]*[^"name":"\"]*[^\\]')

感谢任何帮助。

【问题讨论】:

  • 看起来像 JSON。你在处理 JSON 吗?
  • 你能分享几个样本
  • @MonkeyZeus,是 JSON,但整个元数据都在 Oracle 数据库列中。不在 Python 等中编码的平面文件中。
  • @JoeFerndz 我确实分享了 3 个字符串示例。对于无关紧要的事情,实际的字符串要长得多。所以我将它们表示为“anything_before”和“anything_after”。这些真的可以是任何东西。

标签: regex substr


【解决方案1】:

我使用嵌套的 regexp_replace 和两个 regexp_substr 函数让它工作。这是丑陋的。必须有更好的方法来做到这一点:

regexp_replace(regexp_substr(regexp_substr(a.metadata, 'subjectareas[^\\]\\[^\\]', 1, 1, 'c'), '\\.* '),'\\|"')

【讨论】:

    【解决方案2】:

    使用

    SELECT REGEXP_SUBSTR(a.metadata,
                         '"subjectareas":\[\{("[^"]*":"[^"]*",)*"name":"\W*"([^\\]*)',
                         1, 1, 'c', 2)
    

    regex proof。你得到了上面REGEXP_SUBSTR的第二组值。

    【讨论】:

    • 谢谢 .. 它有效。但是如果“displayName”出现在“name”之后呢?在我的所有三个示例中,要么没有“displayName”,要么“name”出现在“displayName”之后。
    • @sush 然后使用"subjectareas":\[\{("[^"]*":"[^"]*",)*"name":"\W*"([^\\]*)。看看regex101.com/r/6fblog/2
    • @sush +1 回答这个问题 :)
    • 我想早点谢谢你.. 是的,它奏效了。但是 SO 阻止我只发布感谢信 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2014-05-12
    • 1970-01-01
    • 2017-09-05
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多