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

#regex #vb.net #regex-negation

Вопрос:

Привет, стэковер, цветы,

я не мог найти решение самостоятельно и не мог найти соответствующий ответ, поэтому я обращаюсь к вам за помощью 🙂

Я работаю в VB.Net 4.x среда, в которой мне обычно приходится соединять пути в стиле Windows из различных источников, которые очень ненадежны по своему формату (начальные косые черты, конечные косые черты, иногда двойные косые черты внутри), поэтому я не могу использовать Path.Join

Мое следующее лучшее предположение-регулярное выражение заменить любое двойное появление обратной косой черты одним: \

что слишком наивно, так как оно также преобразует адрес сервера, который начинается с двойной обратной косой черты в начале.

псевдокод

 "\server123\a\b\c\".replace(/\ /g, "") -> "server123abc"
 

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

регулярное выражение

 (?!^\ )\ 
 

что сработало бы в моем примере. Но это не то, что я хочу, чтобы он делал. Он совпадает со второй косой чертой и заменяет ее.

Что не так с моим вторым регулярным выражением? как мне негативно взглянуть на что-то с самого начала?

Спасибо за любое объяснение и решение

Комментарии:

1. Взгляните на Путь. Метод GetFullPath . Это может помочь решить некоторые из ваших проблем.

Ответ №1:

Вы можете использовать

 Regex.Replace(text, "(?<!^\*)\ ", "")
 

Смотрите <a rel=»noreferrer noopener nofollow» href=»https:///regexstorm.net/tester?p=(?демонстрацию регулярных выражений .NET и VB.NET онлайн-демонстрация.

Подробные сведения:

  • (?<!^\*) — отрицательный внешний вид, который не соответствует совпадению, если сразу слева от текущего местоположения есть нулевая или более обратных косых черт от начала строки
  • \ — одна или несколько обратных косых черт.