Добрый день. Есть исходный текст ВасяПупкин ИванИванов
В ворде достаточно применить в поиске регулярку (<*[а-я][А-Я]*>) что-бы найти такие строки. А вопрос вот в чем 1. Как в эксель это перенести (ну ну копировать же туда-сюда), т.к. исходная таблица все равно в экселе 2. Как сделать вставку пробела Вася Пупкин Иван Иванов
Спасибо! В аттаче файл-пример
Добрый день. Есть исходный текст ВасяПупкин ИванИванов
В ворде достаточно применить в поиске регулярку (<*[а-я][А-Я]*>) что-бы найти такие строки. А вопрос вот в чем 1. Как в эксель это перенести (ну ну копировать же туда-сюда), т.к. исходная таблица все равно в экселе 2. Как сделать вставку пробела Вася Пупкин Иван Иванов
Public Function ФИО$(S) Dim Sout As String Sout = S Set RegExp = CreateObject("VBScript.RegExp") RegExp.Global = True RegExp.Pattern = "([\s\S]*)([а-я])([А-Я])([\s\S]*)" Do If RegExp.test(Sout) Then Sout = RegExp.Replace(Sout, "$1$2 $3$4") End If Loop While RegExp.test(Sout) ФИО = Trim(Sout) End Function
[/vba]
можно еще и так [vba]
Код
Public Function ФИО$(S) Dim Sout As String Sout = S Set RegExp = CreateObject("VBScript.RegExp") RegExp.Global = True RegExp.Pattern = "([\s\S]*)([а-я])([А-Я])([\s\S]*)" Do If RegExp.test(Sout) Then Sout = RegExp.Replace(Sout, "$1$2 $3$4") End If Loop While RegExp.test(Sout) ФИО = Trim(Sout) End Function
RAN, $1 - то что нашлось в первых скобках, $2 -во вторых, и т.д. точно так же как и в word в замене с подстановочными знаками (\1 , \2) вот к примеру эта функция возвращает из строки фамилию с инициалами [vba]
Код
Function getFIO$(str$) Dim S$: S = Trim(str) With CreateObject("VBScript.RegExp") .IgnoreCase = False .Global = True .Pattern = "([.-]) +" Do If .Test(S) Then S = .Replace(S, "$1") Loop While .Test(S) .Pattern = "[\s\S]*?([А-Яа-яЁё]+ [А-ЯЁ.-]{4,7})[\s\S]*" If .Test(S) Then getFIO = .Replace(S, "$1") End With End Function
[/vba]
RAN, $1 - то что нашлось в первых скобках, $2 -во вторых, и т.д. точно так же как и в word в замене с подстановочными знаками (\1 , \2) вот к примеру эта функция возвращает из строки фамилию с инициалами [vba]
Код
Function getFIO$(str$) Dim S$: S = Trim(str) With CreateObject("VBScript.RegExp") .IgnoreCase = False .Global = True .Pattern = "([.-]) +" Do If .Test(S) Then S = .Replace(S, "$1") Loop While .Test(S) .Pattern = "[\s\S]*?([А-Яа-яЁё]+ [А-ЯЁ.-]{4,7})[\s\S]*" If .Test(S) Then getFIO = .Replace(S, "$1") End With End Function
ikki, \s - Пробельный символ (space, tab, vblf и т.п.). Эквивалентно выражению "[ \r\t\n\f]" \S - Непробельный символ. Эквивалентно выражению "[^ \r\t\n\f]" * Определяет ни одного или несколько символов, стоящих перед ним. получаеццо что [\s\S]* означает любое количество любых символов
ikki, \s - Пробельный символ (space, tab, vblf и т.п.). Эквивалентно выражению "[ \r\t\n\f]" \S - Непробельный символ. Эквивалентно выражению "[^ \r\t\n\f]" * Определяет ни одного или несколько символов, стоящих перед ним. получаеццо что [\s\S]* означает любое количество любых символовkrosav4ig
достаточный код (всё остальное ненужно и вредно - строгое имхо) для данной задачи [vba]
Код
Function f$(s$) Static r As Object If r Is Nothing Then Set r = CreateObject("vbscript.regexp"): r.Global = 1: r.IgnoreCase = 0: r.Pattern = "([а-яё])([А-ЯЁ])" f = r.replace(s, "$1 $2") End Function
[/vba]
krosav4ig, возьмите на заметку - Replace работает со всеми матчами за раз.
ага, понятно.
достаточный код (всё остальное ненужно и вредно - строгое имхо) для данной задачи [vba]
Код
Function f$(s$) Static r As Object If r Is Nothing Then Set r = CreateObject("vbscript.regexp"): r.Global = 1: r.IgnoreCase = 0: r.Pattern = "([а-яё])([А-ЯЁ])" f = r.replace(s, "$1 $2") End Function
[/vba]
krosav4ig, возьмите на заметку - Replace работает со всеми матчами за раз.ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Понедельник, 17.11.2014, 17:23