Regullar表达式 - 在这里还是那里?

时间:2017-11-30 12:58:05

标签: regex

我有一个包含类似以下结构的数据的文件:

    {
        "HRP1001_ObjectType": "S",
        "HRP1001_ObjectID": 20000499,
        "HRP1001_BeginDate": "01.01.2017",
        "HRP1001_EndDate": "",
        "HRP1001_SubType": "B007",
        "HRP1001_TypeOfRelatedObject": "C",
        "HRP1001_IDOfRelatedObject": 30000018
    },
    {
        "HRP1001_ObjectType": "S",
        "HRP1001_ObjectID": 20000500,
        "HRP1001_BeginDate": "01.01.2017",
        "HRP1001_EndDate": "",
        "HRP1001_SubType": "A003",
        "HRP1001_TypeOfRelatedObject": "O",
        "HRP1001_IDOfRelatedObject": 10000097
    },
    {
        "HRP1001_ObjectType": "S",
        "HRP1001_ObjectID": 20000500,
        "HRP1001_BeginDate": "01.01.2017",
        "HRP1001_EndDate": "",
        "HRP1001_SubType": "A012",
        "HRP1001_TypeOfRelatedObject": "O",
        "HRP1001_IDOfRelatedObject": 10000097
    },

所以我需要找到所有实体(一个实体是卷曲括号之间的数据),其中ObjectID具有特定值 IDOfRelatedObject具有特定值。

让我们说我正在寻找的价值是:10000097。我目前通过运行以下两个表达式实现这一点,就像一个白痴:

\{\s.*\n.*: .*\n.*\n.*\n.*\n.*\n.*10000097\n.*\}
\{\s.*\n.*: 10000097.*\n.*\n.*\n.*\n.*\n.*\n.*\}

无论如何要么在一个表达式中对上面看到的表达式说OR,要么创建一个更聪明的表达式来做同样的事情?

我正在使用sublime text 3 btw,如果正则表达式引擎很重要..我猜它使用python,不确定..

2 个答案:

答案 0 :(得分:1)

使用正则表达式的| OR或替代运算符。

\{[^{}]*"HRP1001_(ObjectID|IDOfRelatedObject)":\s*10000097[^{}]*\}

DEMO

答案 1 :(得分:0)

你可以用这个:

{\n\s{8}\"\w+\": \"(\w+)\"\,\n\s{8}\"\w+\": \d{1,}\,\n\s{8}\"\w+\": \"\w+\.\w+.\w+\"\,\n\s{8}\"\w+\": \"\"\,\n\s{8}\"\w+\": \"\w+\"\,\n\s{8}\"\w+\": \"\w+\"\,\n\s{8}\"HRP1001_IDOfRelatedObject\": 10000097\n\s{4}\}\,

enter link description here