Из следующего текста я хочу извлечь number
и unit of measurement
.
У меня есть 2 возможных случая:
Это какой-то текст 14.56 kg
и какой-то другой текст
или
Это некоторый текст kg 14.56
и некоторый другой текст
Я использовал |
, чтобы сопоставить оба случая.
Моя проблема в том, что он выдает пустые совпадения и, таким образом, дает неверное количество совпадений.
Это мой код:
std::smatch m;
std::string myString = "This is some text kg 14.56 and some other text";
const std::regex myRegex(
R"(([\d]{0,4}[\.,]*[\d]{1,6})\s+(kilograms?|kg|kilos?)|s+(kilograms?|kg|kilos?)(\s+[\d]{0,4}[\.,]*[\d]{1,6}))",
std::regex_constants::icase
);
if( std::regex_search(myString, m, myRegex) ){
std::cout << "Size: " << m.size() << endl;
for(int i=0; i<m.size(); i++)
std::cout << m[i].str() << std::endl;
}
else
std::cout << "Not found!\n";
ВЫВОД:
Size: 5
kg 14.56
kg
14.56
Я хочу простой способ извлечь эти 2 значения, поэтому я предполагаю, что мне нужен следующий вывод:
WANTED OUTPUT:
Size: 3
kg 14.56
kg
14.56
Таким образом, я всегда могу напрямую извлечь 2-е и 3-е, но в этом случае мне также необходимо проверить, какой из них является числом. Я знаю, как сделать это с двумя отдельными поисками, но я хочу сделать это правильно, с одним поиском без использования c ++, чтобы проверить, является ли подстатье пустой строкой.