Регулярное выражение для сопоставления чисел с небольшой проблемой - PullRequest
2 голосов
/ 19 октября 2011

Моя проблема состоит в том, чтобы извлечь числа из списка списка валют.

Мои тестовые данные будут выглядеть примерно так

$100.00
AUD 2012.00
Rs. 234.0 ASD
133 USD
Another thing 1233S.E122
Blah Blah 1.23 
SG$ 013.3
23.03 Something
Something T1233S.122S Else
Whatever 2

И регулярное выражение, которое я придумал, это

(\d+)\.?(\d+)?

Таким образом, по сути, число, за которым следует необязательная точка и еще одно необязательное число.

Итак, , хотя это прекрасно работает , работает немного больше, чем я хочу.Например, это соответствует

1233 и 122 в 1233S.E122 и то же самое для T1233S.122S

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

Как бы я сделал так, чтобы оно НЕ совпадало с теми, которые содержат нецифровые символы в начале, середине или конце?

Пожалуйста, будьте любезны дать краткое объяснение вашего ответа, так как я новичок в RegEx.

Ответы [ 2 ]

5 голосов
/ 19 октября 2011

Использовать некоторые границы слов ...

\b\d+(?:\.\d+)?\b

Это будет соответствовать числам с необязательным десятичным разрядом, которые окружены границами слов.

RegExr .

Я также немного прибрал ваше регулярное выражение, предполагая, что вы хотите сопоставить целое число, а не десятичное число по отдельности.

0 голосов
/ 19 октября 2011

Если существует не более одного нецифрового символа, и вы знаете, что символ всегда является заглавной, вы должны иметь возможность определить диапазон символов, например [AZ] *.Звезда указывает сценарию искать 0 или 1 символ в этом диапазоне, и без чего-либо до него этот символ может находиться в любом месте последовательности.

Если вы хотите искать только нечисловые символы вв самом начале строки поместите символ «^» перед диапазоном, например: «^ [AZ]».Это будет искать только заглавную букву в начале строки;вам нужно было бы специально ограничить диапазон везде, если вы не хотите, чтобы буквы появлялись где-то еще.

Вы также можете запросить такие цифры: "[0-9] +".Это будет соответствовать одному или нескольким символам в этом диапазоне, что гарантирует, что вы получите что-то с числом.

В целом, это будет выглядеть примерно так (при условии, что буква может быть где угодно):

/ [AZ] * [0-9] +. / G (для javascript)

Надеюсь, что поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...