Регулярное выражение для фильтрации массива строк, исключая те, которые начинаются с '.'

У меня есть строковый массив списка содержимого каталога. Я хочу перечислить все строки, которые не начинаются с "." (т.е. не скрытые имена).

🚩 Ограничения, налагаемые контекстом, требуют решения Regex, которое работает на C++. Это не может быть изменено.

Например, учитывая это:

string fileList[] = {"test.png", "Hellozip.zip", "123.mp3", "hid.mp3", "hid.file.png", "sp ace.png", "comm(a.mp3", ".Hidden.txt"};

".hid.mp3" и ".Hidden.txt" должны быть отфильтрованы.

Вот тестовый код, для которого регулярное выражение должно работать:

string fileList[] = {"test.png", "Hellozip.zip", "123.mp3", "hid.mp3", "hid.file.png", "sp ace.png", "comm(a.mp3", ".Hidden.txt"};

for(auto& file : fileList)
{
    if (std::regex_match(file, std::regex(fileRegex, std::regex_constants::icase)) == true)
    {
        cout << file << " - Match\n";
    }
    else
    {
        cout << file << " - No Match\n";
    }
}

Я пробовал следующее, но это не работает:

string fileRegex = "\[\\w-\]*\\.{0,1}\[\\w- ()\]*\\.(png|jpg|zip|mp3|txt)";

Решение не должно заботиться об обработке особых случаев «.», «..».

Это совершенно тривиально без регулярного выражения. Есть ли веская причина для усложнения?

Pete Becker 10.01.2023 18:26

Зачем использовать регулярное выражение для этого? Не проще ли было бы проверить первый символ на наличие . и удалить файл? Затем добавить . и .. в список после этого (поскольку они есть в каждом каталоге)?

Nicol Bolas 10.01.2023 18:26

Еще одна подсказка: используйте std::string::find_first_of('.')

Pepijn Kramer 10.01.2023 18:56

Знакомо ли вам выражение «теперь у вас две проблемы»? Погуглите, если нет.

n. m. 10.01.2023 19:17

@JerryCoffin В большинстве (всех?) unix-подобных системах корневой каталог имеет ссылку .. на корень.

perivesta 10.01.2023 19:22

Мне нужно использовать существующую функцию (не изменять, поскольку она используется другими функциями), поэтому я не могу изменять параметры функции...

skv 10.01.2023 19:51

Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией, чтобы найти адекватный ответ.

Community 10.01.2023 21:43
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
3
7
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Как насчет

 ^[^.].*$

Кажется работает

И вы можете проверить регулярное выражение, используя этот сайт: regex101.com

Lalit Tyagi 15.01.2023 11:28

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

Как сопоставить только определенные символы в заданной строке с регулярным выражением?
Установите условие внутри лямбда-функции в зависимости от того, является ли значение, захваченное с помощью регулярного выражения, None или ""
Переименование нескольких файлов в каталоге с использованием определенной строки в каждом файле
Извлечь первый символ всех слов, кроме первого
Разбор дат в другом формате из текста
Мне нужно регулярное выражение, чтобы аннулировать все одинаковые цифры в номере телефона
Использование регулярных выражений для извлечения определенной информации через PyPDF2
Установите регулярное выражение с множественным выбором, чтобы попытки сопоставления всегда выполнялись слева направо, независимо от того, пытается ли другое предыдущее регулярное выражение захватить больше символов?
Сравнение значений из двух списков с помощью регулярных выражений в Kotlin
Извлечь слово из строки в определенной позиции в сценарии bash