Как извлечение числа почти случайной цепи в C ++ используя регулярные выражения, [закрывший]

Как извлечение конкретного числа одного string у которого может быть почти любая форма, объясняет себе:

Мой string может быть: cualquiercosa+CH+number+cualquiercosa а именно: TEST-13?:41CH12f:A1345

Только я нуждаюсь в том, чтобы извлечь число, которое следует за CH, и конвертировать это в int.

3
задан 19.01.2017, 15:53
0 ответов

Формат цепи кажется достаточно закрывшим несмотря на зависимость от случая той же самой, следующие выражения могут стоить тебе для того, чтобы извлечь число:

  • .+CH(\d+).+.
  • \w+-\d+\?:\d+CH(\d+)f:.+.

Согласно ограничительному, чем ты хочешь быть ты был бы должен использовать одну или другую.

Применять регулярное выражение к тексту.

Заголовок <regex> añadiada в C ++ в стандарте C ++ 11 автоматизирует процесс использования регулярных выражений:

std::regex expresion(R"(\w+-\d+\?:\d+CH(\d+)f:.+)");
std::cmatch coincidencias;
std::regex_search(texto, coincidencias, expresion);

Вслед за вызовом в std::regex_search объект std::cmatch (что является версией std::match_result для цепей символов char) он будет содержать задержанный текст регулярного выражения, будучи первое задержание в положении 1.

Преобразовывать текст в число.

Ты можешь использовать функцию std::atoi заголовка <cstdlib>:

int numero = std::atoi(coincidencias[1].str().c_str());

Функция std::atoi надейся получить указатель в цепь символов. Оператор квадратные скобки ([]) объекта std::match_result возврати объект sub_match у которого есть функция, чтобы превращаться в std::string.

Но я предпочитаю выбор использовать stream текста:

std::stringstream stream(coincidencias[1].str());
int numero = 0;
stream >> numero;

Код.

[Здесь] ты можешь видеть код функционируя:

int main()
{
    constexpr char text[]{"TEST-13?:41CH12f:A1345"};
    std::regex expresion(R"(\w+-\d+\?:\d+CH(\d+)f:.+)");
    std::cmatch coincidencias;
    std::regex_search(text, coincidencias, expresion);

    std::stringstream stream(coincidencias[1].str());
    int numero = 0;
    stream >> numero;
    std::cout << numero;
    return 0;
}
2
ответ дан 03.12.2019, 17:37
  • 1
    Я quedé думая: ¿ из-за qué ты использовал constexpr и не просто const? –  02.02.2018, 20:02
  • 2
    ¿ И из-за qué нет? Этот текст - expresió n постоянная величина. –  02.02.2018, 20:07