Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражения для числа с плавающей запятой 
:(
    Опции темы
kinder999
Дата 19.10.2010, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Доброго времени суток. Помогите пожалуйста составить регулярное выражение.
Задача: есть строка, например "fs-fd-324sg.5-hghghj.9-80g90"
Мне необходимо получить из неё число, т.е. на выходе должно получиться: -324.598090
Пробывал такое:
Код

^[-+]?\d+(\.\d+)?$

из справки MSDN
Код

([-]{0,1}[.]{0,1}[0-9]+)?


получаю на выходе:
Код

Изначальная строка: inputStr = "fs-fd-324sg.5-hghghj.9-80g90"
Итог: outputStr = "-324.5.9-8090"


Т.е. он не удаляет повторный знаки "-", которые после первой позиции, а также повторные точки...

Подскажите, пожалуйста, как можно модернизировать это шаблон, что бы он подходил к моей задаче...

Заранее спасибо...
PM MAIL   Вверх
Мурлыкатам_
Дата 21.10.2010, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Можно разбить задачу на более мелкие этапы:
Код
"fs-fd-324sg.5-hghghj.9-80g90"

1) 
Код
-?\.*\d\.* 
- расшифровываем: минус (-)? - делает минус перед любой цифрой (\d) или 0 и более точек (\.*) опциональным, необязательным, после цифры тоже могут быть 0 и более точек;
2) получается из твоего примера: -324.5.9-8090 проверяешь, есть ли у тебя минус в начале строки: bool isNegative = resultStr.StartsWith("-"); если тру, делаешь: убиваешь все минусы в строке Replace('-', ''); а затем добавляешь минус в начало.
если фолс:  Replace('-', '');
3) получается -324.5.98090, теперь нам необходимо определить все точки: int firstDotPosition = resultStr.IndexOf('.'); // индекс оф берет ПЕРВУЮ позицию точки, после если -1 - значит точки нет, и все супер. Если нет:
3.1) удаляем все точки из строки resultStr = resultStr.Replace('.', '');
3.2) вставляем нашу точку на нужное место: resultStr = resultStr.Insert(firstDotPosition, ".");
4) делаем парс значения: -324.598090 double result = double.Parse(resultStr);
5) наслаждаемся жизнью smile

Гуру бы сделал все одним регексом, но это было бы достаточно тяжелое выражение и я никак не запомню синтаксис регексов smile Да я и не гуру smile

Кстати альтернативно можно сделать так:
Код

string resStr = string.Empty;
bool minusFound = false;
bool dotFound = false;
for(int charIndex = 0; charIndex < testString.Length(); charIndex++) {
     if(testString[charIndex].equals('-') && !minusFound) {
        resStr += testString[charIndex]; // ToString() если необходимо.
        minusFound = true;
     } else      if(testString[charIndex].equals('.') && !dotFound) {
        resStr += testString[charIndex]; // ToString() если необходимо.
        dotFound = true;
     } else if(Char.IsDigit(testString[charIndex])) {
        resStr += testString[charIndex];
     }
}

Должно че-то получится из этого smile

Можно так же сделать зачистку входящей строки от чего угодно с помощью Regex.Replace(): http://msdn.microsoft.com/en-us/library/aa...v=VS.71%29.aspx

Это сообщение отредактировал(а) Мурлыкатам_ - 21.10.2010, 16:20


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
kinder999
Дата 27.10.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Спасибо буду пробывать
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.