Отказ от ответственности: используйте парсер, если у вас есть опция. Тем не менее ...
Это регулярное выражение, которое я использую (!) Для соответствия тэгам HTML:
<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>
Это может быть не идеально, но я запустил этот код через lot HTML. Обратите внимание, что он даже ловит странные вещи, такие как , которые появляются в Интернете.
Думаю, чтобы он не соответствовал самодостаточным тегам, вы либо захотите использовать Kobi :
<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+(?
или просто объединить, если и если нет.
To downvoters: Это рабочий код из реального продукта. Я сомневаюсь, что кто-либо читает эту страницу, создается впечатление, что социально приемлемо использовать регулярные выражения для HTML.
Предостережение. Я должен заметить, что это регулярное выражение все еще ломается при наличии блоков CD87, комментариев и элементов сценария и стиля. Хорошая новость заключается в том, что вы можете избавиться от тех, кто использует регулярное выражение ...
Слава Богу, ты вырезал и вставил свой оригинальный код! Я знаю, что вы сделали, потому что когда я вырезал и вставил ваш код, я вижу, что у вас есть невидимые символы после открытой цитаты и до D:\
.
Эти две строки выглядят одинаково, но это не так! Вырежьте и вставьте их, если вы мне не верите!
Ваш код:
FileInfo fileInfo = new FileInfo(@"D:\ScriptData\test.zip");
Фиксированный код:
FileInfo fileInfo = new FileInfo(@"D:\ScriptData\test.zip");
Вот что показывает бинарный редактор.
Вы тайно застряли E2 80 AA
в файле исходного кода в начале вашего имени файла. Что является представлением UTF-8 символа ВЛЕВО ВПРАВО .
Судя по вашему скриншоту и выводу, в начале пути к файлу есть невидимый символ. Это приведет к тому, что .NET не сможет распознать, что это абсолютный путь, и автоматически это сделает его самим абсолютным путем.
Если вы используете этот код, вы заметите, что вставленный ?
вызывает проблему здесь:
System.IO.FileInfo fi = new System.IO.FileInfo(@"?D:\some_file.ext");
, который выводит: C:\Users\...\ConsoleApp8\bin\Debug\netcoreapp2.2\?D:\some_file.ext
.
Вместо:
System.IO.FileInfo fi = new System.IO.FileInfo(@"D:\some_file.ext");
Который выводит: D:\some_file.ext
.
Если вы поместите свой код в HEX-редактор, вы увидите, что перед D:
действительно есть символ.