2016-11-27 31 views
-3

我有一個包含從不同的語言,如字符字符串:多語言字符串的正則表達式

en <chars in english> fr <chars in french> es <chars in spanish> 

我需要從上面的字符串中提取只是在特定語言的字符串。我如何使用正則表達式或python2.6中的其他工具?

ps。它可能是不同的順序,如:en(。)es(。)it(。*),問題是es或fr或它 - 不在拉丁字符集中, - 這就是爲什麼常規正則表達式無法正常工作

+0

你如何定義在正則表達式的具體language''? – Mohammad

+1

你有可靠的結構嗎?[英語單詞] - [西班牙語單詞] - ...'還是你必須猜測語言?這將是一項艱鉅的任務。 – Jasper

+0

你能發表一個預期結果的例子嗎?它不是很清楚... –

回答

2

正則表達式使用unicode,你有幾種選擇你的字符串的方法。下面是一個例子,其中的字符串在語言代碼邊界(如「en」和「es」)上分割並放入列表中。然後是迭代列表並找到你想要的語言。

>>> text = u"en <chars in english> fr <chars in french> es <chars in spanish>" 
>>> languages = set((u'en', u'fr', u'es')) 
>>> re_languages = '|'.join(languages) 
>>> splitter = re.compile(ur'\b({})\b'.format(re_languages)) 
>>> splitter.split(text) 
[u'', u'en', u' <chars in english> ', u'fr', u' <chars in french> ', u'es', u' <chars in spanish>'] 

>>> parts=splitter.split(text)[1:] 
>>> for i in range(0, len(parts),2): 
...  if parts[i] == 'es': 
...   print parts[i+1] 
... 
<chars in spanish> 
>>> 

或者你可以找到他們一次一個

>>> re.findall(r'\b(en|es|fr) (.*?)(?:(?= (?:en|es|fr)\b)|$)', text) 
[(u'en', u'<chars in english>'), (u'fr', u'<chars in french>'), (u'es', u'<chars in spanish>')] 
>>> 
+0

你有沒有考慮到語言代碼的邊界'en','fr'和'es' - 是不同的字符集?例如,如果我試圖找到它'r'en(。*)fr' - 它找不到任何字符,因爲在不同的字符集中。 – swserg

+0

嗯,什麼?如果你使用unicode,它們不是以不同的字符集。如果您以某種方式使用多個字符集(也許多個窗口代碼頁?),它們無論如何都不能位於同一字符串中。你必須將它們解碼爲unicode才能使其工作。測試're.search(r'en(。*)fr',u「en fr es 」)'適合我。 – tdelaney