Регулярное выражение для поиска двузначных чисел в случайной строке в C

Итак, вот что я хочу сделать: предположим, у нас есть файл.txt со строками случайных символов внутри каждой строки. Мне нужно печатать только те строки, которые содержат точно двузначные числа, как так: *

  • (любой нецифровый символ или ничего) [1-9] [0-9] (любой нецифровый символ или ничего)

Я думал об использовании регулярных выражений, что-то вроде этого.

bool teststuff(char* line)
{
    int comp;
    regex_t myregex;

    // Compile the regular expression
    comp = regcomp(&myregex, "[^0-9]?[1-9][0-9][^0-9]?", REG_EXTENDED | REG_NOSUB) ;
    //([^0-9][1-9][0-9][^0-9])

    // Compare line to the regex
    return 0 == regexec(&myregex, line, NULL , NULL , NULL) ? true : false;
}

И это работает до такой степени, без фильтрации тривиальных строк, таких как:

2333333|; ²³~ @`1´ ©«» ¤¼× {3} abc def ghi jkl mno pqrs tuv wxyz ABC DEF GHI JKL MNO PQRS TUV WXYZ !

или же

12123asdas

Я все еще изучаю C, поэтому любой совет будет оценен!

1 ответ

Решение

Вы можете использовать

"(^|[^0-9])[1-9][0-9]($|[^0-9])"

Он находит двузначное число без начального нуля, которое не заключено в другие цифры.

Детали шаблона

  • (^|[^0-9]) - начало строки (^) или любой нецифровый символ ([^0-9])
  • [1-9] - цифра от 1 в 9
  • [0-9] - любая цифра ASCII
  • ($|[^0-9]) - конец строки ($) или любой нецифровый символ ([^0-9])
Другие вопросы по тегам