Спасибо большое за пояснения про \b и за пример.
([\.,;:\s]|^) - это вроде понятно: определяет какой-либо из символов - точку/запятую/точку с запятой/двоеточие/побел и подобное ИЛИ начало строки
(?:ИП|ОАО|ЗАО|АО|ООО|фирма|ЧП|ТД|_) - не могу расшифровать "?:"и "_". Что они означают?
(?=[\.,;:\s]|$) - не могу расшифровать в выражении "?=" (знаю только, что ? - это ноль или одно вхождение, а для чего "=" не знаю)
От "[^А-Яа-яёЁ0-9A-Za-z\-]", думаю не стоит отказываться, потому что кроме
[\.,;:\s]|^) могут встречаться и кавычки всех сортов и нижние подчеркивания и всё подряд.
После Replace
"[^А-Яа-яёЁ0-9A-Za-z\-]" на "пробел", как я понимаю, должно идти вот такое:
"(\s|^)(?:ИП|ОАО|ЗАО|АО|ООО|фирма|ЧП|ТД|_)(\s|$)"Верно?
По прежнему не понимаю для чего "?:" и "_"
Я ещё пыталась сделать такое: если первая отдельностоящая группа это цифры (без вкрапления букв) и есть второе слово за пробелом, то соединить их нижним подчеркиванием.
Например "ООО 7 континент мира" -> "7_континент", или "ЗАО 29 спуск" -> "29_спуск", но! "7Б Куликово ЧП" - это "7Б", но! "777 фирма" -> "777"
Вы могли бы помочь? Как проверить, что первая группа до пробела это только числа?
Я представляла бы себе паттерн для задачки с цифрами таким:
"(^+\d{1,}\s+[А-Яа-яёЁ0-9A-Za-z\-]{1,})(\s|^)" - но в примере не работает.
Вот этот блок у меня вылетает:
Код |
---|
If regex.Test(txt) Then
Set matches = regex.Execute(txt)
txt = matches.Item(0)
txt = Replace(txt, " ", "_")
Else
regex.Pattern = "(^+[А-Яа-яёЁ0-9A-Za-z\-]{1,})(\s|^)"
If regex.Test(txt) Then
Set matches = regex.Execute(txt)
txt = matches.Item(0)
Else
txt = "-"
End If
End If |
Смысл кода выше - если первое слово - все_знаки_цифры - то обрабатывем, как я описала выше. Если это буквы, то берем _только_ первое слово. Если букв-цифр не имеется - т.е. пусто или пробелы, то ставим "-".
С файлом-примером исправилась. Этот более человечный. Просто я не думала что первый файл-пример не пригодится, т.к. сократила свой изначальный вопрос и думала, что на него можно ответить без моего примера.