2016-11-07 74 views
0

這是我的樣本數據(屬性)來匹配:正則表達式提取全部採用豬

[87027^適用年齡#619081^12-36個月,108389^國產/進口#619192^國產,108376^包裝單位#619113^盒裝,12210^分類#121491^牛奶粉,108385^奶源產地#619164^澳洲/新西蘭,115919^配方#651827^常規配方奶粉,12212^段位#121499^3段,108380^淨含量#619152^2kg以上] 
[108385^奶源產地#619183^其它 ,12212^段位#121499^3段,87027^適用年齡#619081^12-36個月,108376^包裝單位#619120^桶裝,108389^國產/進口#619196^進口,12210^分類#121491^牛奶粉,115919^配方#651827^常規配方奶粉,12241^價格#121803^200-299元,108380^淨含量#619147^800-1000g] 
[87027^適用年齡#619081^12-36個月,108389^國產/進口#619192^國產,108376^包裝單位#619113^盒裝,12210^分類#121491^牛奶粉,108385^奶源產地#619164^澳洲/新西蘭,115919^配方#651827^常規配方奶粉,12212^段位#121499^3段,108380^淨含量#619152^2kg以上] 

所以我想,以配合在數字之間所有的值。因此,對於第一條數據行,我想要匹配87027和619081之間的值以及619081和108389之間的值,以此類推。

這裏是我到目前爲止的代碼:

data = LOAD 'SHORT.txt' USING PigStorage() AS (number:chararray, user:chararray, item:chararray, attributes:chararray); 
B = FOREACH data GENERATE REGEX_EXTRACT_ALL (attributes, '\\^(.*?)[#|,|\\]]'); 

DUMP B; 

請讓我知道,如果你有需要的任何其他信息。謝謝!

+0

好奇。我的回答有幫助嗎? – tmslnz

+0

我瞭解您提供的正則表達式,它在您提供的鏈接中起作用,但我仍然無法讓代碼正常工作。 – gambaboy

+0

我的輸出只顯示爲: () () () – gambaboy

回答

0

這種模式捕捉你的描述:

\d+?(\^.+?[,#\]]) 

這裏舉例:https://regex101.com/r/pOPWwY/2

看起來像Hadoop的需要反斜槓的雙轉義,所以測試時,上面銘記這一點。

如果要排除的標記, # ],則:

\d+?(\^.+?)[,#\]]