2012-01-27 60 views
1

我是Python新手,正在尋找一個slug/url參數化庫,它提供了與Ruby Stringex library類似的功能。例如:Python中的高級slug/url參數化(包括音譯)庫

# A simple prelude 
"simple English".to_url => "simple-english" 
"it's nothing at all".to_url => "its-nothing-at-all" 
"rock & roll".to_url => "rock-and-roll" 

# Let's show off 
"$12 worth of Ruby power".to_url => "12-dollars-worth-of-ruby-power" 
"10% off if you act now".to_url => "10-percent-off-if-you-act-now" 

# You don't even wanna trust Iconv for this next part 
"kick it en Français".to_url => "kick-it-en-francais" 
"rock it Español style".to_url => "rock-it-espanol-style" 
"tell your readers 你好".to_url => "tell-your-readers-ni-hao" 

我遇到了webhelpers.text.urlify,它聲稱要做到這一點,但結果並不接近。任何幫助深表感謝。

回答

2

檢查slugify,這是基於Django's own slugify template filter,但與NFKD normalization。下面是相關的代碼:

re.sub(r'[-\s]+', '-', 
      unicode(
       re.sub(r'[^\w\s-]', '', 
        unicodedata.normalize('NFKD', string) 
        .encode('ascii', 'ignore')) 
       .strip() 
       .lower())) 

它並不像Ruby的Stringex強大,但是你可以很容易地在UnidecodeText::Unidecode的Perl模塊的Python的端口擴展,以擴大這些&符號,美元符號等看看,這與Stringex用於Unicode音譯的相同。

+0

謝謝了很多Chewie! – 2012-01-27 12:42:05

+0

我認爲這個代碼**的方式**比strictgex的要差。它甚至不做音譯。例如,「möp」變成「拖把」而不是「moep」。 – ThiefMaster 2014-05-17 22:51:21