2011-12-06 60 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()}