2015-12-28 2 views
1

я в настоящее время пытаюсь извлечь следующее десятичное число:Extract десятичного числа от предложения, используя QRegularExpression

2453,6756667756

из следующего предложения:

ID: 1 x: 1202 y: 2453.6756667756 w: 242

Я использую этот код:

regularExpression.setPattern("(\\d+)(?:\\s*)(w:)") 

Однако это дает мне этот результат:

, который не является правильным вообще.

Не могли бы вы помочь мне, пожалуйста?

ответ

4

Вы можете использовать следующее регулярное выражение:

\d+\.\d+(?=\s*w:) 

См demo

В Qt:

regularExpression.setPattern("\\d+\\.\\d+(?=\\s*w:)") 

регулярное выражение матча:

  • \d+ - 1 или более цифр
  • \. - буквальная точка
  • \d+ - 1 или более цифр
  • (?=\s*w:) - положительный предпросмотр убедившись, есть ноль или более пробельных символов после последней цифры совпадают и w с последующим : (но это подстрока не расходуется, просто проверяется на наличие, так как lookaheads утверждения с нулевой шириной).

Вы можете использовать simpler regex без опережающего просмотра с захвата группы:

(\d+\.\d+)\s*w: 

Тогда значение будет находиться в группе 1.

+1

Привет, спасибо за вашу помощь! Я не знал, что этот отличный сайт существует. Это будет очень полезно! –

+1

Просто обратите внимание, что regex101.com не поддерживает синтаксис regex Qt. Чтобы убедиться, что они будут работать в Qt, не используйте ленивые квантификаторы ('??', '*?', '+?', '{1,5}?') И убедитесь, что вы используете модификатор '/ s' для force '.', чтобы соответствовать новым строкам, как в Qt a.. 'соответствует новой строке. Ну, для базовых моделей, подобных этому, это нужно делать. –

+0

Последний вопрос. Вы рекомендуете мне специальный учебник, в котором рассказывается о регулярных выражениях? Как быть таким же хорошим, как и в регулярных выражениях? Это очень полезно при разработке. –

Смежные вопросы