簡體   English   中英

正則表達式:將重復的組與不重復的組進行匹配

[英]Regex: Match repeated groups with non repeated groups

我有一個Json字符串,我需要從C#中使用Regex提取一些數據。該字符串是這樣的:

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3",
  "key4": [
    {
      "arrayKey1": 1,
      "arrayKey2": "something",
      "arrayKey3": "somethingelse"
    },
   {
      "arrayKey1": 2,
      "arrayKey2": "something2",
      "arrayKey3": "somethingelse2"
    },
   {
      "arrayKey1": 3,
      "arrayKey2": "something3",
      "arrayKey3": "somethingelse3"
    }
  ],
  "some very long text here": ""
  "anotherKey": "value",
  "keylast": "valuelast"
}

我想使用命名的組提取數組的值,我使用以下正則表達式完成了它(?:"arrayKey1": (?<arrayKey1>[^"]+),[\\n\\t ]+"arrayKey2": "(?<arrayKey2>[^"]+)",[\\n\\t ]+"arrayKey3": "(?<arrayKey3>[^"]+)")

這很好用,我得到每個匹配項,每個匹配項都有3組每個鍵。

現在,我想添加一個額外的匹配項,該匹配項僅包含我無法使用的“ anotherKey”的值,這是我嘗試過但無法使用的一些正則表達式:

(?:"arrayKey1": (?<arrayKey1>[^"]+),[\n\t ]+"arrayKey2": "(?<arrayKey2>[^"]+)",[\n\t ]+"arrayKey3": "(?<arrayKey3>[^"]+)")(?:[\s\S]*)(?:"anotherKey": "(?<anotherKey>[^"]+)")

這個確實獲得了“ anotherKey”,但是它只返回數組中的第一項,而不是全部。

另外: https//regex101.com/r/mfXlRs/1

有人可以把我擺放正確嗎?

謝謝

您的arrayKey1..3正則表達式(僅)給出了三個單獨的匹配項,在每個匹配項中,您都獲得了3個必需值。

現在,在添加片段以尋找anotherKey ,但在父級上,情況發生了變化。 現在你只有一個單一的比賽,這是因為:

  • 您的“舊”正則表達式僅匹配第一組arraykeys
  • 然后(?:[\\s\\S]*)將所有內容匹配到anotherKey ,包括剩下的兩組arraykeys
  • 添加的部分僅匹配anotherKey

也許您應該通過2個單獨的步驟執行匹配:

  • 從第一個(舊)匹配開始,獲得3個arraykey匹配並將它們存儲在某個位置。
  • 然后運行第二個匹配, 適用於anotherKey

+量詞添加到“舊”組將無濟於事,因為如果捕獲組被匹配多次,則該組將保留最后一個匹配項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM