Автономные номера Regex?

В настоящее время я использую это регулярное выражение:

(\d+)

проблема в том, что я могу получить 2 строки:

"2112343 and alot of 4.99"

OR

"4.99 and alot of 2112343 "

Я получаю это от обоих:

[2112343, 4, 99]

Мне нужно получить только2112343... How can i achieve this?

 Jon Clements♦30 июн. 2012 г., 21:45
если вы знаете, что вы находите - зачем вам это нужно?
 Joel Cornett30 июн. 2012 г., 21:34
(?:^| )(\d+)(?:$| )
 Gumbo30 июн. 2012 г., 21:37
@pst Чтобы быть точным, он получает только последовательности цифр, следовательно\d.
 user16639030 июн. 2012 г., 21:32
Он получает «только цифры». Возможно, вы хотите перефразировать заголовок?
 Olivier Jacot-Descombes30 июн. 2012 г., 21:48
\d обозначает цифру и не включает десятичную точку.

Ответы на вопрос(6)

Решение Вопроса

Попробуй это

(?<![0-9.])\d+(?![0-9.])

Использует шаблон

(?<!prefix)position(?!suffix)

где(?<!prefix)position означает: соответствует позиции, не следуя префиксу.

а такжеposition(?!suffix)  означает: соответствует позиции без предшествующего суффикса.

в конце концов[0-9.] означает: любая цифра или десятичная точка.

попробуй это

(?<!\S)\d+(?!\S)

это будет соответствовать только целым числам

>>>r = re.match("\d+", "23423 in 3.4")
>>>r.group(0)
'23423'
 30 июн. 2012 г., 21:42
Я не думаю, что это то, что хотел оп. Это был только первый номер в его примере ...
 30 июн. 2012 г., 21:41
Такое решение будет работать только в этом конкретном случае. Я сомневаюсь, что OP хочет решение, которое работает только для строк в этом формате.

Если я вас правильно понял, вы тоже хотите сопоставить эти числа с точкой внутри, но не хотите, чтобы они были в результирующей коллекции.

Я хотел бы подойти к этому через 2 шага, сначала выберите все числа, в том числе с точкой:

(\d+(?:\.\d+)*)

затем отфильтруйте все, что не чисто числа, и используйте свое первое регулярное выражение и примените его к каждому элементу результирующей коллекции с первого шага:

(\d+)
 30 июн. 2012 г., 21:36
@pst: вопрос в том, хотим ли мы обработать & quot; 123. & quot; как хотел или нет. Ваш селектор совпадет с ним и выбросит его на втором шаге. Мой селектор будет соответствовать & quot; 123 & quot; и, наконец, сохранить его. Оператор должен решить, что лучше всего подходит для этой проблемы ...
 30 июн. 2012 г., 21:34
Я согласен с этим подходом; нет смысла пытаться придумать слишком сложное регулярное выражение ... Однако я бы использовал[\d.]+ в качестве начального селектора.

Как я написал в своем комментарии:

(?:^| )(\d+)(?:$| )

Это будет соответствовать всем "словам" которые полностью состоят из цифр (слово представляет собой строку непробельных символов, окруженных пробелами и / или начало / конец строки.)

Решение Вопроса

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

(?<![0-9.])(\d+)(?![0-9.])

В качестве альтернативы, если вы хотите сопоставлять только отдельные номера (например, если вы не хотите сопоставлять 123 вabc123def):

(?<!\S)\d+(?!\S)
 30 июн. 2012 г., 21:35
Не будет соответствовать намеренно.
 30 июн. 2012 г., 21:34
Так 0.1234.0 - & gt; ?
 30 июн. 2012 г., 21:38
@Тихоокеанское стандартное время1 а также4 находятся в[0-9.] и, таким образом, не разрешено находиться слева и справа от подобранной группы из-за внешнего вида.
 30 июн. 2012 г., 21:42
Это соответствуетhello 1234 world - & GT;1234 потому что пробельные символы не в[0-9.] и, таким образом, удовлетворить внешний вид. Вы знаете, как работают обходные пути?regular-expressions.info/lookaround.html
 30 июн. 2012 г., 21:46
RegexPal не использует C # regex; он использует регулярное выражение JavaScript. Два не одинаковы. В частности, регулярное выражение JavaScript не поддерживает отрицательный внешний вид.

Ваш ответ на вопрос