使用正则表达式匹配中英文字符【转】

上一篇 / 下一篇  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:

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 4964
  • 日志数: 3
  • 书签数: 1
  • 建立时间: 2010-05-20
  • 更新时间: 2010-05-26

RSS订阅

Open Toolbar