Другие языки программирования и технологии

Проблема с построением регулярного выражения

Здравствуйте!
Я начал изучать регулярные выражения и столкнулся с проблемой непонимания мною структуры этих выражений.
У меня есть строки, имеющие следующий контент:
"-12.5", "2", "32.0"
Мне нужно написать такое регулярное выражение, которое бы дало возможность обработать эти строки и получить следующие значения:
125, 2, 32
Т. е. в первом случае выражение отсеяло знаки, во втором случае оставило неизменным, а в последнем оно проверило, что после запятой остался только ноль и этот ноль мне в подсчетах не нужен, ибо 320 - другое число.
Прошу помощи юному программисту!
Заранее - спасибо!
в первом случае выражение отсеяло знаки
и
в последнем оно проверило, что после запятой остался только ноль и этот ноль мне в подсчетах не нужен, ибо 320 - другое число
Это несколько взаимоисключающие требования, т. к. в первом случае 125 и 12,5 это нихера не одно число.
Если требование реално такое, то лучше его разбить на два регекспа, первый будет гасить все ".0", а второе - все нецифры.
На чем вы пытаетесь писать это - непонятно, регекспы имеют свойство несколько менять свой синтаксис в зависимости от реализации, например на линуксовом баше регэксп пишется по-одному, на java чуть-чуть по-другому.
Поскольку я чуть лучше разбираюсь с жавой чем с grep'ами и sed'ами
Итак:
String input= "-12.5 2 32.0" //входящая строка
String firstRegexp=input.replcaeAll(".0 | .0$",""); //заменить в строке инпут все ".0<пробел>" или ".0<конец строки> на ничего. По идее firstRegexp=-12,5 2 32
String secondRegexp=firstRegexp.replaceAll("\\D",""); // заменить в строке firstRegexp все не цифры на ничего. По идее secondRegexp=125 2 32.
Одно замечание по первому регекспу, в жава символ "." это просто точка, т. е. запись .0 - будет означать в регулярном выражении именно точка-ноль идущие подряд, в линуксе-же символ точка - это любой символ, т. е. выражение ".0" - означает последовательность из любого символа и 0, чтобы это было именно точка-ноль надо этот симваол точка экранировать косой, на подобии: "\.0".
Т. е. если мы хотим заменить именно последовательность точка-0 в жава, то регэксп будет ".0"
А если в линуксе - то там - "\.0".
ZK
Zulfu Karabulut
4 644
Лучший ответ
Саша Люхин Хм. Спасибо. А как себя поведёт данный метод, если будет строка, аля: -1231421.21242100001000
Надо будет вернуть 123142121242100001, т. е. это число без лишних знаков и лишних нолей
И, да, я пишу это в java
Сергей Пырков Точка — это любой символ в стандарте перловых регулярок, к линуксу это имеет слабое отношение, это имеет отношение к Perl, из которого регулярки и пришли к нам. Если не точка — любой символ, тогда что? И зачем было вводить свои правила? Это же вносит путаницу.
я тоже крайне с трудом понимаю логику.... даже расписанные примеры (коих куча, да не по нужному смыслу) не понимаю...
Валера Сергеев
Валера Сергеев
60 769
Регулярные выражение не занимаются заменой символов, это шаблоны, по которым можно искать куски строк. То есть, ты можешь найти дробное число примерно по \d+\.\d+\D, хотя возможны немного разные варианты написания. В php есть замена по регуляркам — preg_replace, в нём можно в найденных числах заменять точку, но регулярки там те же самые, и изучению эта функция не способствует.
Я бы на твоём месте нашёл все числа, зате сделал замену \.[0]+ на пустую строку, а затем заменил все точки на пустую строку.