我有一个包含从不同的语言,如字符字符串:多语言字符串的正则表达式
en <chars in english> fr <chars in french> es <chars in spanish>
我需要从上面的字符串中提取只是在特定语言的字符串。我如何使用正则表达式或python2.6中的其他工具?
ps。它可能是不同的顺序,如:en(。)es(。)it(。*),问题是es或fr或它 - 不在拉丁字符集中, - 这就是为什么常规正则表达式无法正常工作
我有一个包含从不同的语言,如字符字符串:多语言字符串的正则表达式
en <chars in english> fr <chars in french> es <chars in spanish>
我需要从上面的字符串中提取只是在特定语言的字符串。我如何使用正则表达式或python2.6中的其他工具?
ps。它可能是不同的顺序,如:en(。)es(。)it(。*),问题是es或fr或它 - 不在拉丁字符集中, - 这就是为什么常规正则表达式无法正常工作
正则表达式使用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>')]
>>>
你如何定义在正则表达式的具体language''? – Mohammad
你有可靠的结构吗?[英语单词] - [西班牙语单词] - ...'还是你必须猜测语言?这将是一项艰巨的任务。 – Jasper
你能发表一个预期结果的例子吗?它不是很清楚... –