从文本文件中提取数据 - 重复的值

时间:2011-12-06 18:14:34

标签: java regex extraction

  

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)。这就像使用两种不同的正则表达式。

3 个答案:

答案 0 :(得分:0)

您可以使用所需的任何语言,甚至可以使用sedawkgrep等unix命令行实用程序。正则表达式应该是这样的 - 你想匹配9!0后跟数字后跟0%。使用此正则表达式:9!0(\d+)0%(如果数字都是两位数,9!0(\d{2})0%)。

答案 1 :(得分: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()
} 

答案 2 :(得分:0)

其他答案都很好,我的正则表达式解决方案只是“9!。(\ d \ d)”

这是PowerShell的完整解决方案,可以很容易地与其他.net语言相关联

$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()}
相关问题