2012-05-10 5 views
-3

у меня есть строка, какРегулярное выражение для извлечения числа из строки со специальными символами

8.123.351 (Some текст здесь)

Я использовал Regex

/([0-9,]+(\.[0-9]{2,})+(\.[0-9]{2,})?)/ 

в принять значение «8.123.351» из строки. Он работает для строки, указанной выше.

Но он не работает, когда строка без "." например «179 (текст здесь)». Я модифицировал Regex, чтобы соответствовать этому значению, но не удался.

Так может кто-нибудь предложить мне Regex, чтобы получить номера из строк, как:

  1. 8.123.351 (Some текст здесь)
  2. 179 (Some текст здесь)
  3. 179.123 (Некоторые текст здесь)
  4. 179,1 (Некоторый текст здесь)
+0

Можете ли вы представить больше идеи о правильном формате чисел?Какие существуют правила? Может ли быть любое число '.' ', Где угодно, число может быть любым размером, длиной и т. Д.? – LeonardChallis

+0

@ Leonard, Спасибо за ваш комментарий. Я разместил несколько строк с номерами. Строка содержит цифры с 2-3 цифрами, которые фиксированы. Но многократное появление чисел с "." между ними не фиксировано. Поэтому мне нужны все числа с "." или без него – Sanjay

+0

Случайный сленговый термин «специальные символы» не определен стандартом Unicode. Это слишком неряшливо. В любом случае все кодовые точки являются специальными или неспецифическими. – tchrist

ответ

1

Вы не очень понятны. Я делаю некоторые предположения для создания шаблона.

  1. Цифры в начале строки
  2. Существует по крайней мере, 1 цифра и не более 3 цифр, прежде чем есть точечно

Теперь мы создаем ваше выражение

  1. Соответствие с 1 по 3 цифры в начале строки

    /^\d{1,3}/ 
    
  2. Существует необязательно (The ? после группы) точка и от одного до трех более цифр

    /^\d{1,3}(?:\.\d{1,3})?/ 
    
  3. Эта часть с точкой может повторяться 0 или более раз (заменить ? с *)

    /^\d{1,3}(?:\.\d{1,3})*/ 
    

    Посмотри here on Regexr

Если вы хотите прочитать некоторые основы регулярных выражений, I wrote a blog post about that.

+0

Спасибо stema, это более совершенное выражение, чем я подготовил. И спасибо за предоставление хорошего сообщения в блоге о Regex. – Sanjay

1
/([0-9]+[,\.]?)+/ 

MATC hes все ваши строки

Кстати ... вашему RegEx нужна точка для соответствия, потому что + говорит 1 или больше совпадений. * - 0 или более, а ? - 0 или 1

+0

Спасибо kuh-chan за то, что он показал мне свою ошибку, сейчас работает. Я могу получить все числа из строки с помощью "." или без "." Я изменил регулярное выражение и заменил «+» на «*» – Sanjay

+0

Это может быть не проблема, но это также будет соответствовать «1.2.3. (некоторый текст) ', так что если это проблема, это неправильно – LeonardChallis

+0

@Leonard Да, но строки никогда не будет. после чисел, равных 1.2.3. Спасибо за ваш комментарий. – Sanjay

Смежные вопросы