Вопрос по python, c#, numbers, regex – Автономные номера Regex?

0

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

(\d+)

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

"2112343 and alot of 4.99"

OR

"4.99 and alot of 2112343 "

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

[2112343, 4, 99]

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

(?:^| )(\d+)(?:$| ) Joel Cornett
Он получает «только цифры». Возможно, вы хотите перефразировать заголовок? user166390
\d обозначает цифру и не включает десятичную точку. Olivier Jacot-Descombes
если вы знаете, что вы находите - зачем вам это нужно? Jon Clements♦
@pst Чтобы быть точным, он получает только последовательности цифр, следовательно\d. Gumbo

Ваш Ответ

6   ответов
0

Попробуй это

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

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

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

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

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

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

0

попробуй это

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

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

1

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

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

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

3

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

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

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

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

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

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

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

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

(\d+)
Я согласен с этим подходом; нет смысла пытаться придумать слишком сложное регулярное выражение ... Однако я бы использовал[\d.]+ в качестве начального селектора.
@pst: вопрос в том, хотим ли мы обработать & quot; 123. & quot; как хотел или нет. Ваш селектор совпадет с ним и выбросит его на втором шаге. Мой селектор будет соответствовать & quot; 123 & quot; и, наконец, сохранить его. Оператор должен решить, что лучше всего подходит для этой проблемы ...
-1
>>>r = re.match("\d+", "23423 in 3.4")
>>>r.group(0)
'23423'
Такое решение будет работать только в этом конкретном случае. Я сомневаюсь, что OP хочет решение, которое работает только для строк в этом формате.
Я не думаю, что это то, что хотел оп. Это был только первый номер в его примере ...

Похожие вопросы