python正则表达式匹配英语和telugu/devanagari单词

python正则表达式匹配英语和telugu/devanagari单词,python,regex,devanagari,Python,Regex,Devanagari,我需要一些帮助,从混合语言中获取单词,它包含英语和泰卢固语,这是我到目前为止的代码 #!/usr/bin/env python # -*- coding: utf-8 -*- import re sentence="hello world యూనియన్ యూనియన్" sentence=sentence.decode('utf-8') for m in re.finditer(ur'(\w|\’\w|\'\w)+', sentence, re.UNICODE): start

我需要一些帮助,从混合语言中获取单词,它包含英语和泰卢固语,这是我到目前为止的代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re 
sentence="hello world యూనియన్ యూనియన్" 
sentence=sentence.decode('utf-8') 
for m in re.finditer(ur'(\w|\’\w|\'\w)+', sentence, re.UNICODE): 
    start, end = m.span() 
    word = m.group().encode('utf-8') 
    print start, end, word 
我期待的结果是

0 5 hello 
6 11 world 
11 17 యూనియన్ 
17 23 యూనియన్  
但我得到的结果是

0 5 hello 
6 11 world 
12 13 య 
14 15 న 
16 18 యన 
20 21 య 
22 23 న 
24 26 యన 

代码分割语言的每个字符,并给出独立的起始和结束长度。是否有任何方法可以将上述格式的结果作为单词而不是字符

关键是
\w
与变音符号不匹配

您可以在模式中使用并包括
\p{M}
,或者按照以下方式定义cmobining标记Unicode范围:


请参阅

我强烈建议您避免在非UTF字符上使用正则表达式,因为它可能会严重失控。为什么不使用字符串属性和方法构建一些自定义方法呢

以下是我要做的:

sentence="hello world యూనియన్ యూనియన్" 
res = sentence.split();
last_index = 0;
for word in res:
    start = sentence.index(word, last_index ) 
    end = start + len(word)
    last_index = end
    print(start, end, word) 

您可以查看正在运行的示例。

这正是我要查找的,它对我的数据非常有效,很高兴能提供帮助。只需向上投票/选择正确,也许它对其他人也有用。它在代码方面对我有很大帮助。非常感谢您的帮助。@Rohitgohtham很高兴它对您有用。请考虑通过点击来接受答案。✓ 如果我的回答对你有帮助(请参见),请点击左边(请参见)并向上投票(请参见)。
sentence="hello world యూనియన్ యూనియన్" 
res = sentence.split();
last_index = 0;
for word in res:
    start = sentence.index(word, last_index ) 
    end = start + len(word)
    last_index = end
    print(start, end, word)