2012-04-05 5 views
1

Я хотел бы совместить положительные и отрицательные числа (без десятичных или тысяч разделителей) внутри строки с использованием .NET, но я хочу только совместить целые слова. Так, если строка выглядитRegEx для сопоставления номеров только целыми словами

redeem: -1234 
paid: 234432 

тогда я хотел бы, чтобы соответствовать -1234 и 234432

Но если текст

LS022-1234-5678 
FA123245 

, то я хочу совпадение не вернулся. Я пробовал

\b\-?\d+\b 

но он будет соответствовать только 1234 в первом сценарии, не возвращая знак «-».

Любая помощь приветствуется. Спасибо.

ответ

0

Ну, я уверен, что это далеко от совершенства, но это работает для примера:

(?<=\W)-?(?<!\w-)\d+ 

Если вы хотите разрешить подчеркивания только перед номером, то я бы использовал эту модификацию:

(?i)(?<=[^a-z0-9])-?(?<![a-z0-9]-)\d+ 

Сообщите мне о каких-либо проблемах, и я попробую и помогу. Если вы хотите, чтобы я объяснил их, сообщите мне об этом.

EDIT

Чтобы соответствовать только, если есть пробел или табуляцию непосредственно перед номером/отрицательным знаком (как отмечено в комментарии ниже), это может быть использовано:

(?<=[ \t])-?\d+ 

Обратите внимание, что он будет соответствовать, например, по первой номерной строке номера телефона, времени или даты и не будет соответствовать, если номер находится в начале строки (после новой строки) - убедитесь, что это то, что вы намереваетесь: D

+0

Вы очень помогаете, спасибо. Это намного лучше.Однако я не смог правильно определить задачу: я хочу совпадение, только если положительному или отрицательному числу предшествует пробел или символ TAB (я не хочу, чтобы пробел или вкладка были включены в совпадение). – Daniel

+0

@ Daniel - См. Ревизию в редакции выше –

1

Нет границы слова между пробелом и -, поэтому вы не можете использовать \b.

Вы могли бы использовать:

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

или

(?<![\w-])-?\d+\b 

в зависимости от ваших требований (которые не полностью уточненных). Оба будут работать на ваших примерах.

+0

все еще кажется чтобы соответствовать случаям, которые он не хочет сопоставлять ... (?), он не соответствует числам как отрицательные числа, но он соответствует цифрам, потому что дефис «не является символом слова» –

+0

Код Жокей: вы являются правильными. Мне нужно также сопоставить «-». Также предоставленный RegEx соответствовал большому количеству «мусора» (а это означало не целое слово). – Daniel

+0

@ Daniel обновленная версия должна работать лучше. – Qtax

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