Регулярное выражение для сопоставления путей к файлам Windows в кавычках или без кавычек

У меня есть текст, из которого мне нужно извлечь все пути к файлам или папкам (жирный текст ниже). Пути без кавычек не имеют пробелов и должны сопоставляться так же, как и пути в кавычках. Это вариант регулярного выражения DOT.NET в C#.

«C:\Future\Code In Progress» произвольный несовпадающий текст C:\Data\Code v:\Bless\Test.txt «D:\APPZ\Bam Bam\Malkop.mp3»

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

Regex.Matches (input, @"\""[a-zA-Z]:\\.*?\""", RegexOptions.IgnoreCase)

Регулярное выражение: @""[a-zA-Z]:\.*?"" не работает. Что я здесь делаю не так?

Прочтите спецификацию регулярного выражения и найдите решение — всего лишь несколько подсказок [^ и {0,1} и группировка с помощью ( и ) — и ваше регулярное выражение не будет работать, если в именах папок или файлов есть цифры или e. г. символы подчеркивания или даже символы Юникода для неанглийских языков или смайлы... все это разрешено в системных путях к файлам Windows! И ты даже забыл пространство внутри пути! Только абсолютные пути?

BitLauncher 18.05.2024 20:48

Это может привести вас очень близко к [a-zA-Z]:\(.*?)(?=([" ]*[a-zA-Z]:\)|(")), если вы добавите " или c :\\ до конца текста он полностью работает. Он извлекает все пути за один шаг. Надеюсь, это сработает для вас. Имейте в виду, что в случае несовпадающего текста после пути вам потребуется добавление, чтобы обнаружить эти случаи.

Yair I 18.05.2024 22:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте Regex в С#:

\"\w+\:(\\\w+[ \w+]*)+(\.\w+)?\"

Итак, ваш код должен быть:

Regex.Matches (input, @"\""\w+\:(\\\w+[ \w+]*)+(\.\w+)?\""", RegexOptions.IgnoreCase)

Вы можете проверить здесь: regexstorm.net

Объяснение регулярного выражения:

Ответ принят как подходящий

В итоге я использовал две строки регулярных выражений.

string quoted = @"(?<=\"")[a-zA-Z]:\\.*?(?=\"")";
string unquoted = @"(?<!\"")[a-zA-Z]:\\[^\s]*";

Другие вопросы по теме