使用正则表达式匹配中英文字符【转】
上一篇 /
下一篇 2010-05-25 17:04:58
/ 个人分类:正则表达式
需要从类似:
MiDKPData={};
MiDKPData["dkp"]={};
MiDKPData["dkp"][1]={};
MiDKPData["dkp"][1]["name"]="开心圈圈DKP";
MiDKPData["dkp"][1]["members"]={};
MiDKPData["dkp"][1]["members"]["Donesee"]=5;
MiDKPData["dkp"][1]["members"]["Latrogue"]=0;
MiDKPData["dkp"][1]["members"]["Longwalker"]=15;
MiDKPData["dkp"][1]["members"]["Lovelace"]=56;
MiDKPData["dkp"][1]["members"]["Lucid"]=232;
MiDKPData["dkp"][1]["members"]["Mitnick"]=0;
MiDKPData["dkp"][1]["members"]["Neverlose"]=33;
MiDKPData["dkp"][1]["members"]["Ooxxoo"]=10;
MiDKPData["dkp"][1]["members"]["Shadowghost"]=3;
MiDKPData["dkp"][1]["members"]["Steafinie"]=14;
MiDKPData["dkp"][1]["members"]["一脸猥琐"]=5;
MiDKPData["dkp"][1]["members"]["三聚氰胺"]=31;
MiDKPData["dkp"][1]["members"]["人生真谛"]=20;
MiDKPData["dkp"][1]["members"]["伟大的乌瑟尔"]=5;
MiDKPData["dkp"][1]["members"]["光之留香"]=73;
这样的数据中提取字符,这应该是Lua中数据类型。开始我考虑用处理字符串的方法提取,但经过测试效率很低而且容易出错。然后我尝试使用正则表达式匹配这些数据,使用正则表达式匹配的话需要对里面可能出现的中文进行匹配,该文件正常情况下应该是采用UTF-8编码。
defretext(data):
data=data.split('\n')
dict0={}
forliindata:
m=re.match(r"(\[\")(\w+|[\x80-\xff]+|[\u3400-\u9FFF]+)(\"\]\s\=\s)(\d+)(\;)",li)
try:
dict0[m.group(3)]=m.group(5)
exceptAttributeError:
pass
returndict0
retext()中的[\x80-\xff]+可以匹配任意长度的UTF-8编码的中文,而[\u3400-\u9FFF]+可以匹配任意长度的unicode编码中文。我在函数中加入了对unicode编码进行匹配的原因是我需要处理的这个字符串是通过request.POST.get()发送到服务器的。而这个request.POST.get()正是使用unicode编码。如果在数据库中查询这些数据则还需要使用decode('utf-8')将字符转化成UTF-8编码。
http://2.latest.jieblog.appspot.com/tag/utf-8/
收藏
举报
TAG: