Mam dużo długich sznurków - nie wszystkie z nich mają tę samą długość i treści, dlatego nie mogę korzystać z indeksów - i chcę wyodrębnić sznur ze wszystkich. To jest to, czego chcę wyodrębnić:

http://www.someDomainName.com/anyNumber 

SomeDomainName nie zawiera żadnych liczb i {X1}} jest inny w każdym długim ciąg. Kod powinien wyodrębnić żądany ciąg z dowolnego łańcucha i powinien uwzględniać przestrzenie i wszelkie inne dziwne rzeczy, które mogą pojawić się w długim łańcuchu - powinno być możliwe dzięki regularnym w prawo? -. Czy ktoś mógłby mi z tym pomóc? Dziękuję Ci.

Aktualizacja: Powinienem był powiedzieć, że www. i .com zawsze są takie same. Również somedomainname! Ale jest inny http://www. w ciągu

0
Loolooii 30 wrzesień 2012, 20:58

4 odpowiedzi

Najlepsza odpowiedź
import re
results = re.findall(r'\bhttp://www\.someDomainName\.com/\d+\b', long_string)
1
jfs 30 wrzesień 2012, 17:31
>>> import re
>>> pattern = re.compile("(http://www\\.)(\\w*)(\\.com/)(\\d+)")
>>> matches = pattern.search("http://www.someDomainName.com/2134")
>>> if matches:
        print matches.group(0)
        print matches.group(1)
        print matches.group(2)
        print matches.group(3)
        print matches.group(4)

http://www.someDomainName.com/2134
http://www.
someDomainName
.com/
2134

W powyższym wzorze schwytaliśmy 5 grup -

  • Jeden jest kompletnym ciągiem, który jest dopasowany
  • Odpoczynek są w kolejności wsporników, które widzisz .. (więc szukasz drugiego ..) - {x0}}

Jeśli chcesz, możesz uchwycić tylko część string Cię interesuje .. więc możesz usunąć brackets od reszty wzoru, którego nie chcesz i po prostu trzymaj {{ X2}}

>>> pattern = re.compile("http://www\\.(\\w*)\\.com/\\d+")
>>> matches = patter.search("http://www.someDomainName.com/2134")
>>> if matches:
       print matches.group(1) 

someDomainName

W powyższym przykładzie nie będziesz mieć groups - 2, 3 and 4, jak w poprzednim przykładzie, ponieważ przechwycaliśmy tylko 1 group .. i tak {x2}} jest zawsze Uchwycony .. jest to kompletny ciąg, który pasuje ..

1
Rohit Jain 30 wrzesień 2012, 17:25

Tak, twój najprostszy zakład jest regex. Oto coś, co prawdopodobnie dostanie zadanie:

import re
matcher = re.compile(r'www.(.+).com\/(.+)
matches = matcher.search(yourstring)
if matches:
    str1,str2 = matches.groups()
0
Chrismit 30 wrzesień 2012, 17:09

Jeśli jesteś pewien, że w SomeDomainname nie ma kropek, możesz po prostu wziąć pierwsze występowanie ciągów ".com /" i weź wszystko z tego indeksu

Spowoduje to unikanie użycia regexa, które są trudniejsze do utrzymania

exp = 'http://www.aejlidjaelidjl.com/alieilael'
print exp[exp.find('.com/')+5:]
0
Ant 30 wrzesień 2012, 17:37