2016-05-18 3 views
1

У меня есть регулярное выражение .net (и я должен использовать регулярное выражение), которое в настоящее время работает, просто сопоставляя любые символы без слов между группами захвата (которые захватывают тест для перехода к методу).Regex: Lookahead, а затем lookbehind from lookahead position

В большинстве случаев он работает нормально, но в случае, когда текст, передаваемый методу, является отрицательным числом, совпадение слов не использует знак минуса и передает положительный номер методу. Чтобы усложнить ситуацию, символы без слов между группами захвата могут содержать текст типа «-», который должен быть использован. Текст также может быть значением валюты, например «200 долларов США», и в этом случае также следует использовать «$».

То, что я пробовал, состояло в том, чтобы потреблять символы без слов, пока не последовало цифра, а затем проверьте, не было ли это число чем-то иным, кроме знака минус, и только потреблять, если это было. Мое регулярное выражение для этого было:

\W+(?!\d(?<![^-])) 

однако это не похоже на работу, как я ожидаю, как это до сих пор кажется потреблять мой знак минус, в результате чего положительного числа передается на мой метод.

Неправильно ли мое регулярное выражение? Или я не могу заглянуть вперед, а потом посмотреть на заднее положение?

Как я могу получить желаемый результат, что этот текст: только

" -100" 

матчи пробелы в начале. И этот текст:

" $200" 

соответствует пробелу и знаку $.

и этот текст:

" - 100" 

соответствует пробел, знак минус и после пробела, а не количество.

Пример можно найти here

+0

Похоже вы можете использовать '\ W + (?! (?

ответ

1

Кажется, вы можете использовать

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

См regexstorm demo

Узор объяснение:

  • \W+ - 1+ не- слово c Символов
  • (?!(?<=-)\d) - это отрицательный предпросмотр, которое не матч, если 1+ символы без слов следует с цифрой \d, которая имеет - перед ним ((?<=-))

enter image description here

+0

Да, похоже, это работает, спасибо. Просто получил приказ моего искателя неправильно! –

+0

Это больше, чем просто заказ. '\ W + (?! \ D (?