2016-07-06 74 views
-2

我有一組年齡數據,如下所示;如何使用正則表達式來捕獲這個特定的年齡集?

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
1,1 
1,2 
1,3 
2,12 
11,13,15 
7,8,12 
12,15 
14,16,17 
15,6 
13,11,10,2 

等等......我試圖用正則表達式來定位一個混合的兒童年齡範圍。邏輯至少需要2個孩子的組合(所以需要一個逗號),至少有一個年齡在10歲以下(最小爲1),至少有一個年齡大於或等於10歲(最大17歲)。

我從以上的預期結果將返回下面的這些行,沒有別的;

2,12 
7,8,12 
15,6 
13,11,10,2 

如何解決任何意見將不勝感激?在此先感謝,我正在繼續嘗試糾正。

+2

這是哪一語言? http://stackoverflow.com/questions/12739633/regex-standards-across-languages –

+0

這是[適用於GA](http://stackoverflow.com/questions/38229345/regular-expression-not-working-in-google - 分析可能歸因於積極的廁所),並且它不會在那裏工作。 RE2不支持lookarounds。 –

回答

2

您可以使用此正則表達式來滿足您的要求:

^(?=.*\b[1-9]\b)(?=.*\b1[0-7]\b)[0-9]+(?:,[0-9]+)+$ 

RegEx Demo

  • 有2個向前看符號斷言10-17
  • ([1-9])之間1-9和另一間2號一個一個號碼匹配應該在19之間
  • 1[0-7]匹配的數字應該在1017之間
  • [0-9]+(?:,[0-9]+)+在正則表達式中用於匹配中間的一個或多個以逗號分隔的數字。
+0

嗨@anubhava不幸的是,如果數字是相反的話,這將不會捕獲。即15,2。數據集大得多,只是反映在Google Analytics中捕獲的數據集。無論訂單如何,我都需要它。我已經更新了這個問題,並希望它有助於進一步解釋這個挑戰。感謝您的幫助。 –

+1

它是完美的,我只是做了一個調整,因爲第一組必須是9歲或以下,所以我刪除了'或10'; (θ= [1-9])\ b)(φ=。* \ b1 [0-7] \ b)[0-9] +(?:,[0- 9] +)+ $ 非常感謝! –

+0

好的答案已更新爲正確。 – anubhava

0

您可以

\b\d,1[0-7]\b 

做提供的年齡總是進行排序(最年輕的到最舊的)。

如果0年齡是不允許的,變化到

\b[1-9],1[0-7]\b 

它檢查單個數字後跟一個逗號和一個隨後的範圍是0-7的單個數字。

See it here at regex101

+0

你問了一個新問題,但是......你甚至試過這個問題嗎?沒有預見,我懷疑你會找到一個更簡單的。 – ClasG

+0

嗨@ClasG - 我確實嘗試了這一點,它會好得多,因爲表達式很好,很簡單,但不幸的是,數據並不總是從最小到最老排序,即我的示例行中有一行是15,6,正則表達式不會捕獲它。我結束了一個瘋狂的解決方案,工作,從[此鏈接](http://stackoverflow.com/questions/38229345/regular-expression-not-working-in-google-analytics-possibly-due-to-positive -loo?noredirect = 1#comment63888417_38229345) –

+1

好吧,我明白了。那麼簡單的解決方案就是,如果你不能處理查找,那就是添加一個交替檢查它的方法 - '\ b(?:\ d,1 [0-7] | 1 [0-7], \ d)\ b' - [在regex101這裏](https:// regex101。com/r/sK3gA4/3) – ClasG

相關問題