Здравствуйте!
Я начал изучать регулярные выражения и столкнулся с проблемой непонимания мною структуры этих выражений.
У меня есть строки, имеющие следующий контент:
"-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".
и
в последнем оно проверило, что после запятой остался только ноль и этот ноль мне в подсчетах не нужен, ибо 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".
я тоже крайне с трудом понимаю логику.... даже расписанные примеры (коих куча, да не по нужному смыслу) не понимаю...
Регулярные выражение не занимаются заменой символов, это шаблоны, по которым можно искать куски строк. То есть, ты можешь найти дробное число примерно по \d+\.\d+\D, хотя возможны немного разные варианты написания. В php есть замена по регуляркам — preg_replace, в нём можно в найденных числах заменять точку, но регулярки там те же самые, и изучению эта функция не способствует.
Я бы на твоём месте нашёл все числа, зате сделал замену \.[0]+ на пустую строку, а затем заменил все точки на пустую строку.
Я бы на твоём месте нашёл все числа, зате сделал замену \.[0]+ на пустую строку, а затем заменил все точки на пустую строку.
Похожие вопросы
- Регулярные выражения
- Структура построения кода
- Pascal. Проблема с логическими выражениями.
- есть вопрос,я хочу знать, ести ли программа, для построения трёхмерного изображения
- Есть ли какая ни будь программа для построения выкроек одежды?
- Написать программу в Паскале для построения графика функций. К программе желательно составить алгоритм.
- Выражения в php
- Функция-калькулятор выражений
- Кто-нибудь может мне объяснить как писать коды в VB6.0 меня интересуют циклы do и for select case само построение
- Что означает выражение. И так что означает выражение n=n+1 . Растолкуйте . Буду оч благодарен за ответ .
Надо будет вернуть 123142121242100001, т. е. это число без лишних знаков и лишних нолей
И, да, я пишу это в java