У меня есть список таких URL

http://example.com
http://www.somesite.com/mypage
anothersite.com/somepage
http://example.com/anotherpage
www.yetanothersite.com

Как видите, есть несколько сайтов с / без http://, с / без подстраниц, с / без www.

Что я пытаюсь сделать, так это очистить список, чтобы он выглядел так (ниже), т.е. удаление http://, удаление подстраниц, но оставление www., если он есть.

example.com
www.somesite.com
anothersite.com
example.com
www.yetanothersite.com

Как лучше всего сделать это в таблицах Google? В идеале было бы замечательно что-то вроде функции php parse_url(). Я экспериментировал с =MID(A1, FIND("//", A1)+2, FIND("/",A1,10)-8), но проблема в том, что он убирает www., есть ли лучший способ сделать это, желательно с использованием пользовательских функций, а не макросов, чтобы он работал как в Excel, так и в Таблицы Google.

0
sam 2 Окт 2014 в 20:15

3 ответа

Лучший ответ

Вы можете сделать это с помощью формулы. Эта же формула будет работать как для Google Таблиц, так и для Excel.

=MID(A2,IFERROR(SEARCH("//",A2)+2,1),IFERROR(SEARCH("/",A2,IFERROR(SEARCH("//",A2)+2,1))-IFERROR(SEARCH("//",A2)+2,1),LEN(A2)))

Это немного долго и некрасиво, но не слишком сложно понять, если вы сломаете его

=MID(A2, 'Take a slice from the middle of the string in cell A2
  IFERROR( 'Return the value found in the next statement, unless its an error
    SEARCH("//",A2)+2 'Search the string for // and take the position after it
    ,1 'otherwise start from the start of the string if its not found
  )
, IFERROR(
  SEARCH("/",A2, 'Search for / in the string
    IFERROR(SEARCH("//",A2)+2,1) 'Start after the // if it was found
  )
  -IFERROR(
    SEARCH("//",A2)+2,1) 'Since the second parameter of mid is a length
                         'not a position, subtract the location of //
                         'again if it was found
    , LEN(A2) 'Otherwise take all of the remaining string
  )
)
1
AndASM 2 Окт 2014 в 19:37

VBA; Отрежьте все до //, затем читайте до следующего /

Function getDomain(url As String) As String
    Dim pos As Long

    pos = InStr(url, "//")
    If (pos > 0) Then
        url = Mid$(url, 2 + pos)
    End If

    pos = InStr(url, "/")
    If (pos > 0) Then
        url = Left$(url, pos - 1)
    End If

    getDomain = url
End Function
1
Alex K. 2 Окт 2014 в 16:28

Эта формула сделает это:

=LEFT(SUBSTITUTE(A1,"http://",""),FIND("/",SUBSTITUTE(A1&"/","http://",""))-1)

Используя ваши примеры:

  1. http://example.com

SUBSTITUTE(A1,"http://","") =
example.com

FIND("/",SUBSTITUTE(A1&"/","http://",""))-1 =
FIND("/","example.com/")-1 =
11

LEFT("example.com",11) =
example.com


http://www.somesite.com/mypage

SUBSTITUTE(A1,"http://","") =
www.somesite.com/mypage

FIND("/",SUBSTITUTE(A1&"/","http://",""))-1 =
FIND("/","www.somesite.com/mypage/")-1 =
16

LEFT("www.somesite.com/mypage",16) =
www.somesite.com


anothersite.com/somepage

SUBSTITUTE(A1,"http://","") =
anothersite.com/somepage

FIND("/",SUBSTITUTE(A1&"/","http://",""))-1 =
FIND("/","anothersite.com/somepage/")-1 =
15

LEFT("anothersite.com/somepage",15) =
anothersite.com


http://example.com/anotherpage

SUBSTITUTE(A1,"http://","") =
example.com/anotherpage

FIND("/",SUBSTITUTE(A1&"/","http://",""))-1 =
FIND("/","example.com/anotherpage/")-1 =
11

LEFT("example.com/anotherpage",11) =
example.com


www.yetanothersite.com

SUBSTITUTE(A1,"http://","") =
www.yetanothersite.com

FIND("/",SUBSTITUTE(A1&"/","http://",""))-1 =
FIND("/","www.yetanothersite.com/")-1 =
22

LEFT("www.yetanothersite.com",22) =
www.yetanothersite.com

1
Rick Hitchcock 3 Окт 2014 в 02:46