Регулярное выражение - извлечь цифры - PullRequest
0 голосов
/ 30 октября 2010

У меня есть строки текста, которые могут иметь следующие форматы:

Было 39,95 £ Теперь только 29,00
ИЛИ
Было 0,95p Теперь 10p

Какой самый простойспособ извлечь два числа из каждой строки, чтобы я мог вычесть их позже.

Ответы [ 2 ]

1 голос
/ 31 октября 2010

Это чудовище будет захватывать два числа, разделенных текстом. Он также будет захватывать юниты.

$match = preg_match("/((?:£)?(\d+(?:\.\d+)?)(?:p)?)[a-z\s]*((?:£)?(\d+(?:\.\d+)?)(?:p)?)/i", "Was £39.95 Now Only 99p");

print_r($matches);

Это даст:

Array (
    [0] => Was £39.95 Now Only 99p
    [1] => £39.95
    [2] => 39.95
    [3] => 99p
    [4] => 99
)
1 голос
/ 30 октября 2010

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

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

Будьте осторожны, потому что это не будет читать единицы, поэтому вы можете легко получить ошибку, если есть что-то вроде следующего:

Was £2 Now Only 99p 

Возможно, вы также захотите следить за запятыми в вашей текстовой строке. Обратите внимание, что здесь также есть проблемы интернационализации, о которых вы должны знать. Многие страны используют , в качестве десятичного разделителя и . в качестве разделителя тысяч. Возможно, вы сможете угадать локаль из валюты (например, £ предполагает, что десятичный разделитель равен .).

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

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