2011-12-06 85 views
0

79 0009 017009 0479%0009 0479 0009 0469%0009 0469 0009 0459%0009 0459'009 0009 0459%0009 0449 0009!!!!! 0449%0009!0449 0009!0439%0009!0439 0009!0429%0009!0429'009 0009!0429%0009!0419 0009!0419%0009!0409 000'009!0399 0009!0389%0009!0389' 009 0009!037​​9%0009!0369 0009!0349%0009!0349 0009!0339%0009!0339 0009!0339%0009!0329'009 0009!0329%0009!0329 0009!032從文本文件中提取數據 - !!!!重複值

在這個數據,我應該提取數字47,46,45,44等等。我應該避免休息。數字總是遵循這個流程 - 9!0沒有9% 例如:9!0 42 9% 我應該選擇哪種語言來解決這個問題,哪種功能可以幫助我? 有沒有可以定位特殊字符並複製下兩個或三個元素的函數? 例如:9!0 42 9%和'009 請注意!然後從那裏複製42並注意'是指另一個值(009)。這就像使用兩種不同的正則表達式。

回答

0

您可以使用任何您想要的語言,甚至可以使用像sed,awkgrep這樣的unix命令行實用程序。正則表達式應該是這樣的 - 你想匹配9!0,然後是數字,然後是0%。使用這個正則表達式:9!0(\d+)0%(或者如果數字都是兩位數,9!0(\d{2})0%)。

0

這是perl的:

@result = $subject =~ m/(?<=9!0)\d+(?=9%)/g; 

它會給你所有的數字陣列。你沒有提供一種語言,所以我不知道這是否適合你。

Pattern regex = Pattern.compile("(?<=9!0)\\d+(?=9%)"); 
Matcher regexMatcher = regex.matcher(subjectString); 
while (regexMatcher.find()) { 
    // matched text: regexMatcher.group() 
    // match start: regexMatcher.start() 
    // match end: regexMatcher.end() 
} 
+0

Java非常喜歡 –

+0

@SiddharthanAsokan檢查更新。 – FailedDev

0

其他的答案都很好,我正則表達式的解決方案是簡單的「9!(\ d \ d)」

而這裏的PowerShell中的完整的解決方案,可以很容易地關聯到其他.NET langs

$t="79 0009!017009!0479%0009!0479 0009!0469%0009!0469 0009!0459%0009!0459'009 0009!0459%0009!0449 0009!0449%0009!0449 0009!0439%0009!0439 0009!0429%0009!0429'009 0009!0429%0009!0419 0009!0419%0009!0409 000'009!0399 0009!0389%0009!0389'009 0009!0379%0009!0369 0009!0349%0009!0349 0009!0339%0009!0339 0009!0339%0009!0329'009 0009!0329%0009!0329 0009!032" 
$p="9!.(\d\d)" 
$ms=[regex]::match($t,$p) 
while ($ms.Success) {write-host $ms.groups[1].value;$ms=$ms.NextMatch()}