/ / Utwórz czysty adres URL z tekstu w Excelu - regex, excel

Utwórz czysty URL z tekstu w Excelu - regex, excel

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 № 1

Mogę 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

wprowadź opis obrazu tutaj

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