2017-03-31 60 views
0

第一:Iknowthisquestionhasbeenbeatentodeath.捕捉重複組與在複雜的正則表達式的中間重複捕獲組

二:我看了所有資源(網絡編輯,RexEggregular-expressions.info等等......)我可以想到過去幾年,我仍然無法掌握這部分正則表達式。無論我使用哪種RegEx,它都不會爲我工作。

現在管家是出路:

我有大量的文字,我需要提取,我認爲正則表達式是非常適合的一些數據。

文本看起來像這樣:

2017年3月31日9點​​41分十八秒EDT [12708-4]參數:$ 1 = '0',$ 2 = 'ON',$ 3 =「ON 「

相當明顯,我要爲$1$2$3值。這個特殊的例子有3個變量,但它通常是1和15

之間我希望有一個正則表達式,將捕獲以下內容:

  1. $ 1
  2. '0'
  3. $ 2
  4. 「ON 「
  5. $ 3
  6. 'ON'

這是我的正則表達式,其中第一場小組賽:

\d{4}.+\[[\d-]*\].+?parameters:\s((\$\d+)\s?=\s?(['\d+\w+]+))

,但沒有加號,括號和逗號組合產生接近我想要的任何東西。即使我從字符串中刪除逗號,然後將它們卡在一起,我也無法捕捉它。

這傢伙抓住了一切,但集團沒有任何意義:

\d{4}.+\[[\d-]*\].+?parameters:\s(((\$\d+)\s?=\s?(['\d+\w+]+),?\s?)+)

有人能在這裏結束我的痛苦和向我解釋如何捕捉重複文字的正則表達式,如果文本分離通過我不關心的角色?

+1

你可能想看看'\ G '這在位置相匹配,以前的比賽結束了'。(?:?!\ G(^),|參數:)\ S +(\ $ \ d +)= '(\ w +)''應該有點你是什麼。尋找 –

+0

我無法得到一個要麼工作還只捕獲一個 – Brandon

+0

嘗試多個匹配/捕獲塞巴斯蒂安提到了一點修改的圖案:['(:?!\ G(^),|參數:) \ S *(\ $ \ d +)\ S * = \ S * '([^'] +)'\ S *'](https://regex101.com/r/3nHI53/1),它不會給你6組,因爲那裏的模式被定義只能有儘可能多的團體。它會給3場比賽×2組中的每個如果這種做法是不是你需要什麼,你就不能使用純的正則表達式得到它。 w ^帽子是編程語言? –

回答

0

我會建議你使用正則表達式來提取這樣設置(\$\d) = '(.+?)'example

每個值然後你可以通過所有的比賽循環。 (即$ 1)第1組在標籤和第2組的值將是(即0)


只是一個小警告,我認爲是值得一提的是:「A重複捕獲組只捕獲最後一次迭代。如果你對數據不感興趣,可以在重複組周圍設置一個捕獲組來捕獲所有迭代或者使用非捕獲組「。(如regex101所述)

+0

還有很多更不相關的東西,以防止從我剛剛捕獲分開兩組問題。我知道它只會捕獲最後一次迭代。我試圖通過在重複的羣組周圍設置一個捕獲組來避開它,但它不起作用。 – Brandon