文字列からの情報抽出
Posted feedbacks - C
ふつーに regex を使いました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>
int main(int argc, char *argv[])
{
int i, n=6, hidden, size, ext;
regex_t reg;
regmatch_t rm[n];
char* str = \
"aaa abc-hidden.png>hoge-big.jpeg\n" \
"---foo-hidden-small.gif|^_^a.bmp\n" \
"--hiddena-hoge.png<=not hidden~~\n" \
"--small.jpg<=not small(^_^)\n" \
"normal-small-big.hoge\n";
memset(rm, 0, sizeof(regmatch_t) * n);
regcomp(®,"([[:alnum:]]+)(-hidden)?(-(big|small))?(\\.[[:alnum:]]+)",
REG_EXTENDED);
while(!regexec(®, str, n, rm, 0)){
hidden = size = ext = 0;
for(i=1; i<n; i++){
if(rm[i].rm_so < 0) continue;
if(str[rm[i].rm_so] == '.') ext = i;
if(!memcmp("-hidden", str + rm[i].rm_so, 7)) hidden = 1;
if(!memcmp("-big", str + rm[i].rm_so, 4)) size = 1;
if(!memcmp("-small", str + rm[i].rm_so, 6)) size = -1;
}
fprintf(stdout, "name:\'");
fwrite(str + rm[1].rm_so, rm[1].rm_eo - rm[1].rm_so, 1, stdout);
fprintf(stdout, "\', ext:\'");
fwrite(str + rm[ext].rm_so + 1, rm[ext].rm_eo - rm[ext].rm_so - 1, 1, stdout);
fprintf(stdout, "\', size: %s hidden: %s\n",
size?((size+1)?"big":"small"):"normal", hidden?"True":"False");
str += rm[0].rm_eo + 1;
}
regfree(®);
return EXIT_SUCCESS;
}
|



にしお
#3407()
Rating0/0=0.00
サンプル入力
サンプル出力
探すべき文字列は下の条件を満たします
出力は以下の条件を満たす必要があります
このお題は、正規表現のグループに名前をつけて連想配列として取得できるPythonからの挑戦状です。
[ reply ]