Chcę utworzyć czysty adres URL z takiego tekstu, jak ten:
Testy alfa "Zakup Berta Global Associates (C)
Adres URL powinien wyglądać tak:
testy alfa-zakup-of-berta-global-associates-c
Obecnie używam tej formuły w programie Excel:
=LOWER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A38;"--";"-");" / ";"-");" ";"-");": ";"-");" - ";"-");"_";"-");"?";"");",";"");".";"");""";"");")";"");"(";"");":";"");" ";"-");"&";"and");"!";"");"/";"-");"""";""))
Jednak nie wydaje mi się, aby złapać wszystkie specjalne symbole itp., W związku z czym moje adresy URL nie są tak czyste, jak bym chciał.
Czy znasz formułę programu Excel lub kod VBA, który zapewnia, że wszystkie symbole specjalne są poprawnie konwertowane na czysty adres URL?
Dziękuję Ci.
Odpowiedzi:
2 dla odpowiedzi № 1Mogę zasugerować następującą funkcję, którą możesz umieścić w module VBA i użyć normalnej formuły:
Function NormalizeToUrl(cell As Range)
Dim strPattern As String
Dim regEx As Object
Set regEx = CreateObject("vbscript.regexp")
strPattern = "[^w-]+"
With regEx
.Global = True
.Pattern = strPattern
End With
NormalizeToUrl = LCase(regEx.Replace(Replace(cell.Value, " ", "-"), ""))
End Function
Chodzi o to, że zastępujemy wszystkie spacje myślnikami na początku, a następnie używamy wyrażenia regularnego, które pasuje do wszelkich znaków niebędących słowami i nie łączami, i usuń je za pomocą RegExp.Replace
.
AKTUALIZACJA:
Po twoich komentarzach wciąż nie jest jasne, co tychcesz zrobić z literami Unicode. Usuń lub zastąp myślnikiem. Oto funkcja, którą próbowałem odbudować z formuły, ale logika może być wadliwa. Wolałbym ogólne podejście powyżej.
Function NormalizeToUrl(cell As Range)
Dim strPattern As String
Dim regEx As Object
Set regEx = CreateObject("vbscript.regexp")
strPattern = "[^w -]"
With regEx
.Global = True
.Pattern = "[?,.")(:!""]+" " THESE ARE REMOVED
End With
NormalizeToUrl = regEx.Replace(cell.Value, "")
NormalizeToUrl = Replace(NormalizeToUrl, "&", "and") " & TURNS INTO "and"
With regEx
.Global = True
.Pattern = strPattern " WE REPLACE ALL NON-WORD CHARS WITH HYPHEN
End With
NormalizeToUrl = LCase(regEx.Replace(Replace(NormalizeToUrl, " ", "-"), "-"))
With regEx
.Global = True
.Pattern = "--+" " WE SHRINK ALL HYPHEN SEQUENCES TO SINGLE HYPHEN
End With
NormalizeToUrl = regEx.Replace(NormalizeToUrl, "-")
End Function