Я хочу найти и разделить слова в заголовке без пробелов.
До:
ThisIsAnExampleTitleHELLO-WORLD2019T.EST (Test) "Test" 'Test' [Test]
После:
Это пример названия HELLO-WORLD 2019 TEST (Тест) [Test] "Test" 'Test'
Я ищу правило регулярного выражения, которое может выполнять следующие действия.
Я подумал, что могу определить каждое слово, если оно начинается с заглавной буквы.
Нотакже сохраните все заглавные слова, чтобы не вставлять их в A L L U P P E R C A S E
.
Дополнительные правила:
- Пробел, если он касается числа:
Hello2019World
Hello 2019 World
- Игнорировать интервальные инициалы, содержащие точки, дефисы или подчеркивания
T.E.S.T.
- Игнорировать интервалы между скобками, скобками или кавычками
[Test] (Test) "Test" 'Test'
- Сохранить дефисы
Hello-World
C #
https://rextester.com/GAZJS38767
// Title without spaces
string title = "ThisIsAnExampleTitleHELLO-WORLD2019T.E.S.T.(Test)[Test]\"Test\"'Test'";
// Detect where to space words
string[] split = Regex.Split(title, "(?<!^)(?=(?<![.\\-'\"([{])[A-Z][\\d+]?)");
// Trim each word of extra spaces before joining
split = (from e in split
select e.Trim()).ToArray();
// Join into new title
string newtitle = string.Join(" ", split);
// Display
Console.WriteLine(newtitle);
Регулярное выражение
я хавиПроблемы с пробелами перед числами, скобками, скобками и кавычками.
https://regex101.com/r/9IIYGX/1
(?<!^)(?=(?<![.\-'"([{])(?<![A-Z])[A-Z][\d+?]?)
(?<!^) // Negative look behind
(?= // Positive look ahead
(?<![.\-'"([{]) // Ignore if starts with punctuation
(?<![A-Z]) // Ignore if starts with double Uppercase letter
[A-Z] // Space after each Uppercase letter
[\d+]? // Space after number
)
Решение
Спасибо за все ваши совместные усилия вответы.Вот пример Regex.Я применяю это к именам файлов и исключаю специальные символы \/:*?"<>|
.
https://rextester.com/FYEVE73725
https://regex101.com/r/xi8L4z/1