Я пыталась сделать такое: если первая отдельностоящая группа это цифры (без вкрапления букв) и есть второе слово за пробелом, то соединить их нижним подчеркиванием. Например "ООО 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
Смысл кода выше - если первое слово - все_знаки_цифры - то обрабатывем, как я описала выше. Если это буквы, то берем _только_ первое слово. Если букв-цифр не имеется - т.е. пусто или пробелы, то ставим "-".
Function InsUnderLine$(s$)
Dim re: Set re = CreateObject("VBScript.RegExp")
re.Pattern = "(\d+) ([А-Яа-яЁё]+)"
InsUnderLine = re.Replace(s, "$1_$2")
End Function
делать нужно не как в учебнике, а до тех пор, пока код не начнет работать так, как Вы планировали к чему вся эта суете с началами и окончаниями строки если нужны: - группа цифр - пробел - группа букв
"(^+\d{1,}\s+[А-Яа-яёЁ0-9A-Za-z\-]{1,})(\s|^)" – надо + убрать совсем? Т.е. "(^\d{1,}\s+[А-Яа-яёЁ0-9A-Za-z\-]{1,})(\s|^)" Или надо поставить скобочку квадратную либо круглую? "(^[+\d{1,}]\s+[А-Яа-яёЁ0-9A-Za-z\-]{1,})(\s|^)" либо "(^(+\d{1,})\s+[А-Яа-яёЁ0-9A-Za-z\-]{1,})(\s|^)" Правильно я понимаю, что убирание плюса ИЛИ заключение в квадратные скобки[+\d{1,}] ИЛИ круглые скобки (+\d{1,}) - дадут один и тот же эффект в данном случае?
Igor у вас пример замечательный и познавательный.
Просто мне хотелось бы ещё разобрать – что у меня не так, из того, что наваялось с моего уровня познаний.
Во второй части убрала + т.е. "(^[А-Яа-яёЁ0-9A-Za-z\-]{1,})(\s|$)" заработало..
Текущий код:
Код
regex.Pattern = "(^\d{1,}\s+[А-Яа-яёЁ0-9A-Za-z\-]{1,})(\s|$)"
If regex.Test(txt) Then
Set matches = regex.Execute(txt)
txt = Trim(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 = Trim(matches.Item(0))
Else
txt = "-"
End If
End If