2015-10-10 2 views
1

[Edited] Я относительно новичок в регулярном выражении, теперь я столкнулся с прецедентом, где целевая строка должна содержать точно ОДНУ точку '.'. Чтобы быть более конкретным, я делаю обнаружение с плавающей запятой, где, как я полагаю, должна содержаться только одна точка и показатель «e».Regex, соответствующий нескольким точкам

Мое регулярное выражение теперь выглядит так: (?=.*[0-9]{1,})(?=.*[\.][0-9])(?=.*[eE][+-]?[1-9]). Это, кажется, работает на тестовых строк, как:

2.1E12 
3.141E23 

Но когда я тестирую с:

1.15E10.34 

Это еще прошло.

Кто-нибудь знает, что я сделал не так? Также кто-то может порекомендовать хороший ресурс для обучения регулярному выражению?

Спасибо!

+0

Вы имеете в виду, что целевая строка должна быть в точности как строка ''. "'? Или что он должен начинаться с одной точки? Или что он должен содержать ровно одну точку? Или что-то другое? – rici

+0

Я только что отредактировал вопрос, чтобы быть более конкретным, пожалуйста, дайте мне знать, если вам, ребятам, нужно больше интеллекта. Бесконечно благодарен! – benjaminz

+0

Какой язык программирования вы используете? – alfasin

ответ

4

Для проверки числа с плавающей точкой, представленного в виде строки, используйте следующий шаблон:

^[0-9]*\.[0-9]+([eE][0-9]+)?$ 

Это проверить, что у вас есть :

  1. 0 или более цифр перед десятичной точкой, но ничего больше.
  2. Точно одна десятичная точка.
  3. По крайней мере, одна цифра после десятичной точки (поплавки в стиле не принимаются)
  4. Если у вас есть E, у вас есть одна или несколько цифр (и только цифры) после нее.

Это, конечно же, предполагает, что строка - это номер, который вы хотите проверить, как предлагает ваш вопрос. Мы можем устранить любую потребность в поиске, если это так.

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

0

A) Если вы хотите совместить только '.' (Строка с Len 1 и полукоксом [0] == «», вы можете использовать

^\.$ 

B) Если вы хотите, чтобы соответствовать любой строке с любой длиной, только с 1 точкой, вы будете использовать

[^\.]\.[^\.] 

вы можете, пожалуйста, напишите комментарий, чтобы сказать мне, что вы хотите, и тогда (A/B), я могу помочь уточнить ответ

+0

Извините, мой пример был немного абстрактным, мой вариант использования, поскольку я только что редактировал вопрос, заключается в проверке плавающей запятой. – benjaminz

0

Как прокомментировал anubhava above, просто используйте:

^\.$ 

для решения регулярных выражений.

Однако, вы можете вместо этого использовать сравнение строк:

testString == "." 
Смежные вопросы