Python’da çalışmak için bu new way to recognise adreslerini yeniden yazabilir miyim? Ben piton sanmıyorumGruber’in URL'si Python’da Normal Düzenleme
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
Python’da çalışmak için bu new way to recognise adreslerini yeniden yazabilir miyim? Ben piton sanmıyorumGruber’in URL'si Python’da Normal Düzenleme
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
bunun için original source devletler için ASCII eşdeğerdir ve özellikle Perl "Bu model en modern regex uygulamalarda çalışmalıdır". Python'un normal ifadesi modern ve similar to Perl's ancak [:punct:]
karakter sınıfında eksik. Kolayca bu kullanarak bu inşa edebilirsiniz: karakteri as required set içindeki
>>> import string, re
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))'
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation)
re.sub()
çağrı belirli karakterleri kaçar.
Düzenleme: sadece her şeyi önünde bir ters eğik çizgi yapışır beri re.escape Kullanma(), da iyi çalışır. Bu ilk başta bana kaba davrandı, ama kesinlikle bu dava için iyi çalışıyor.
>>> pat = pat % re.escape(string.punctuation)
Bu, Gruber'in tüm testlerini geçer, çünkü pat = pat% re.escape (string.punctuation) – Tobias
@vanity'nin de belirtildiği gibi güncellenir. Unicode, eğer veri kaynağınız Unicode ise string.punctuation gibi saf bir ASCII çözümü kusurlu sonuçlar verebilir. –
ASCII olmayan etki alanları ve yolları ile çalışır. İngilizce olmayan noktalama işareti olan test verilerim yok. – Tobias
[-!\"#$%&\'()*+,./:;<=>[email protected]\\[\\\\]^_`{|}~]
Wikipedia yanlış. Http://www.regular-expressions.info/posixbrackets.html adresine göre caret eksik. –
Tamam, şimdi doğru. Lütfen cevabınızı güncelleyin. –
Evet, Gönderdiğim yazı güncellendi, Teşekkürler. Birisi de Wikipedia'yı güncelledi. Harika! – YOU
Python için
[:punct:]
Wikipedia[:punct:]
aynıdır diyor bu ifadeyi var.
[:punct:]
braket ifadesi
[!"#$%&'()*+,\-./:;<=>[email protected][\\\]^_`{|}~]
Ters eğik çıkışlar tersi doğru olmayacağından, bunu kullanırken "ham" bir dize ("r" ile önek) kullandığınızdan emin olun. –
Ayrıca, Python'un bu Unicode karakter özelliklerini desteklemediğini de unutmayın: http://stackoverflow.com/questions/1832893 –
Gerçekten de derlerler, ancak beklediğinizi yapmazlar – Tobias
Hangi kısım çalışmıyor? –
Neden kodunuzu soruya koymuyorsunuz, başarısız olan örneklerle –
@vanity, Unicode karakter özelliklerine sahip yanıt çalışmaz. Http://stackoverflow.com/questions/1832893/python-regex-matching-unicode-properties adresine bakın. –