当前位置:首页 > 话题广场 > 财经专区 > 银行卡

Python中的正则表达式探究(二)

本文以作者实际工作的中文和英文语句语法检查工具为例,说明正则表达式的用法。

#encoding:utf-8

'''

Created on 2016年5月11日

'''

import chardet

import sys

import re

#中文编码字符串

chinese_code=u'\u4E00-\u9FA5'

fullwidth_num=u'\uFF10-\uFF19'

fullwidth_char=u'\uff21-\uff3a\uff41-\uff5a'

fullwidth_black=u'\u3000'

fullwidth_common_symbol=u'\uff01-\uff0f\uff1a-\uff20\uff3b-\uff40\uff5b-\uff5e\uFF5F-\uFF65\uFF9E-\uFF9F'

halfwidth_num=u'\u0030-\u0039'

halfwidth_char=u'\u0041-\u005a\u0061-\u007a'

halfwidth_black=u'\u0020'

halfwidth_symbol=u'\u0021-\u002f\u003a-\u0040\u005b-\u0060\u007b-\u007e'

english_code=halfwidth_num+halfwidth_char+halfwidth_black+halfwidth_symbol

english_code_withoutblack=halfwidth_num+halfwidth_char+halfwidth_symbol

fullwidth_period=u'\u3002'#中文句号

fullwidth_double_quote_front=u'\u201c'#“

fullwidth_double_quote_end=u'\u201d'#”

fullwidth_single_quote_front=u'\u2018'#‘

fullwidth_single_quote_end=u'\u2019'#’

fullwidth_comma=u'\uff0c'#,

fullwidth_slight_pause=u'\u3001'#、

fullwidth_round_bracket_left=u'\uff08'#圆括号左半部(

fullwidth_round_bracket_right=u'\uff09'#圆括号右半部)

fullwidth_book_left=u'\u300a'#书名号左半部《

fullwidth_book_right=u'\u300b'#书名号右半部》

fullwidth_colon=u'\uff1a'#中文冒号:

fullwidth_dash=u'\u2014\u2014'#中文破折号——

fullwidth_percent=u'\uff05'#中文百分号%

halfwidth_dash=u'\u002d'#-

halfwidth_percent=u'\u0025'#百分号%

check_stauts_ok_str="ok"

check_stauts_fail_str="fail"

check_stauts_manual_str="manual"

def record_log(aLog):

f=open('web;,'ab')

f.write(aLog)

f.close()

#需要人工检查的标点符号

special_sysmbol=fullwidth_period+fullwidth_double_quote_front+ \

fullwidth_double_quote_end+fullwidth_single_quote_front+ \

fullwidth_single_quote_end+fullwidth_comma+ \

fullwidth_slight_pause+fullwidth_round_bracket_left+ \

fullwidth_round_bracket_right+fullwidth_book_left+ \

fullwidth_book_right+fullwidth_colon+fullwidth_dash+ \

halfwidth_dash+fullwidth_percent+halfwidth_percent

#所有已知的标点符号(包括全角、半角)

all_symbol=fullwidth_common_symbol+ \

halfwidth_symbol+ \

special_sysmbol

#所有全角标点符号(不包括空格)

fullwidth_symbol_all=fullwidth_common_symbol+fullwidth_period+fullwidth_double_quote_front+ \

fullwidth_double_quote_end+fullwidth_single_quote_front+ \

fullwidth_single_quote_end+fullwidth_comma+fullwidth_slight_pause+ \

fullwidth_round_bracket_left+fullwidth_round_bracket_right+ \

fullwidth_book_left+fullwidth_book_right+fullwidth_colon+ \

fullwidth_dash+fullwidth_percent

#中/英文语句:无全角英文、无全角数字、全角空格

def rule_one(aUnicodeStr):

pat1=re.compile('[%s%s%s]'%(fullwidth_num,fullwidth_char,fullwidth_black))

#print

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

if mat1:

res_status='fail'

res_message=u'规则1-中英文语句:不能含有全角英文、全角数字、全角空格\n出错范围:%s'%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#英文语句:不含有全角标点符号、全角空格、全角数字

def rule_four(aUnicodeStr):

pat1=re.compile('[%s]+'%fullwidth_symbol_all)

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

if mat1:

res_status=check_stauts_fail_str

res_message=u"规则4-英文语句:不能含有非ascii码字符\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:结尾必须是全角标点符号或无标点

def rule_five(aUnicodeStr):

#pat1=re.compile('[%s]*$'%fullwidth_symbol_all)

pat1=re.compile('[%s]+$'%(halfwidth_symbol))

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

#mat2=(aUnicodeStr)

if mat1 :

res_status=check_stauts_fail_str

res_message=u"规则5-中文语句:结尾必须是全角标点符号或无标点符号\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:英文字母、数字之间如果有标点符号,必须为半角

def rule_six(aUnicodeStr):

pat1=re.compile('[%s]{1}[%s]+[%s]{1}'%(halfwidth_num+halfwidth_char,

fullwidth_symbol_all,halfwidth_num+halfwidth_char))

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

if mat1:

res_status=check_stauts_fail_str

res_message=u"规则6-中文语句:英文字母、数字之间如果有标点符号,必须为半角\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:中文前后标点符号,必须为全角

def rule_seven(aUnicodeStr):

pat1=re.compile('[%s]+[%s]+'%(chinese_code,halfwidth_symbol))

pat2=re.compile('[%s]+[%s]+'%(halfwidth_symbol,chinese_code))

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

if mat1 or mat2:

res_status=check_stauts_fail_str

if mat1:

res_message=u"规则7-中文语句:中文前后标点符号,必须为全角\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"规则7-中文语句:中文前后标点符号,必须为全角\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

#return (res_status,res_message)

return (check_stauts_ok_str,'')

#中文语句:全角双引号(“”)中可出现单引号,反之不可以

def rule_eight(aUnicodeStr):

pat1=re.compile(u'[‘]+[^“”‘’]*[“]+[^“”‘’]*[”]+[^“”‘’]*[’]+')

pat2=re.compile(u'[‘]+[^“”‘’]*[“]+[^“”‘’]*[‘]+[^“”‘’]*[”]+')

pat3=re.compile(u'[‘]+[^“”‘’]*[“]+[^“”‘’]*[”]+[^“”‘’]*[’]+')

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

mat3=(aUnicodeStr)

if mat1 or mat2 or mat3 :

res_status=check_stauts_fail_str

if mat1:

res_message=u"规则8-中文语句:全角双引号(“”)中可出现单引号‘’,反之不可以\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

elif mat2:

res_message=u"规则8-中文语句:全角双引号(“”)中可出现单引号‘’,反之不可以\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

else :

res_message=u"规则8-中文语句:全角双引号(“”)中可出现单引号‘’,反之不可以\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:全角双引号内不允许含有全角分号、冒号

def rule_nine(aUnicodeStr):

pat1=re.compile(u'[“]+[^“”]*[:]+[”]')

pat2=re.compile(u'[“]+[^“”]*[;]+[”]')

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

if mat1 or mat2:

res_status=check_stauts_fail_str

if mat1:

res_message=u"规则9-中文语句:全角双引号内不允许含有全角分号、冒号\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"规则9-中文语句:全角双引号内不允许含有全角分号、冒号\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:括号内包含纯中文或同时包含中文及英文和数字时,使用全角括号,括号前后不加空格。

def rule_ten(aUnicodeStr):

pat1=re.compile(u'([ ]+')

pat2=re.compile(u'[ ]+(')

pat3=re.compile(u')[ ]+')

pat4=re.compile(u'[ ]+)')

pat5=re.compile(u'[(]{1}[a-zA-Z0-9]*[^%s%s]+[a-zA-Z0-9]*[)]{1}'%(chinese_code,fullwidth_symbol_all))

#pat5=re.compile(u'[(]{1}[a-zA-Z0-9]*[%s%s]+[a-zA-Z0-9]*[)]{1}'%(chinese_code,fullwidth_symbol_all))

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

mat3=(aUnicodeStr)

mat4=(aUnicodeStr)

mat5=(aUnicodeStr)

if mat1 or mat2 or \

mat3 or mat4 or \

mat5:

res_status=check_stauts_fail_str

if mat1:

res_message=u"规则10-中文语句:括号内包含纯中文或同时包含中文及英文和数字时,使用全角括号,括号前后不加空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

elif mat2:

res_message=u"规则10-中文语句:括号内包含纯中文或同时包含中文及英文和数字时,使用全角括号,括号前后不加空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

elif mat3:

res_message=u"规则10-中文语句:括号内包含纯中文或同时包含中文及英文和数字时,使用全角括号,括号前后不加空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

elif mat4:

res_message=u"规则10-中文语句:括号内包含纯中文或同时包含中文及英文和数字时,使用全角括号,括号前后不加空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

else :

res_message=u"规则10-中文语句:括号内包含纯中文或同时包含中文及英文和数字时,使用全角括号,括号前后不加空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:括号内的内容为纯英文、纯数字或纯半角英文符号时,使用半角括号,括号前后加半角空格。

def rule_eleven(aUnicodeStr):

#pat1=re.compile(u'[(]{1}[^\u0020]+')

pat2=re.compile(u'[^\u0020]+[(]{1}')

pat3=re.compile(u'[)]{1}[^\u0020]+')

#pat4=re.compile(u'[^\u0020]+[)]{1}')

pat5=re.compile(u'[\u0020]{1}[(]{1}[\u0020]{1}[%s]*[%s]+[%s]*[\u0020]{1}[)]{1}[\u0020]{1}'%(

english_code_withoutblack,

chinese_code+fullwidth_symbol_all,

english_code_withoutblack))

pat6=re.compile(u'^[(]')

pat7=re.compile(u'[)]{1}$')

res_status=check_stauts_ok_str

res_message=''

#mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

mat3=(aUnicodeStr)

#mat4=(aUnicodeStr)

mat5=(aUnicodeStr)

mat6=(aUnicodeStr)

mat7=(aUnicodeStr)

if mat2 or \

mat3 or \

mat5 or mat6 or \

mat7 :

res_status=check_stauts_fail_str

#if mat1:

# res_message=u"规则11-中文语句:括号内的内容为纯英文、纯数字或纯半角英文符号时,使用半角括号,括号前后加半角空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

if mat2:

res_message=u"规则11-中文语句:括号内的内容为纯英文、纯数字或纯半角英文符号时,使用半角括号,括号前后加半角空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

elif mat3:

res_message=u"规则11-中文语句:括号内的内容为纯英文、纯数字或纯半角英文符号时,使用半角括号,括号前后加半角空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

#elif mat4:

# res_message=u"规则11-中文语句:括号内的内容为纯英文、纯数字或纯半角英文符号时,使用半角括号,括号前后加半角空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

elif mat5:

res_message=u"规则11-中文语句:括号内的内容为纯英文、纯数字或纯半角英文符号时,使用半角括号,括号前后加半角空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

elif mat6:

res_message=u"规则11-中文语句:括号内的内容为纯英文、纯数字或纯半角英文符号时,使用半角括号,括号前后加半角空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"规则11-中文语句:括号内的内容为纯英文、纯数字或纯半角英文符号时,使用半角括号,括号前后加半角空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:全角中文字符与半角英文字符和半角阿拉伯数字之间应有一个半角空格

def rule_twelve(aUnicodeStr):

pat1=re.compile(u'[a-zA-Z0-9]+[%s]+'%chinese_code)

pat2=re.compile(u'[%s]+[a-zA-Z0-9]+'%chinese_code)

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

if mat1 or mat2 :

res_status=check_stauts_fail_str

if mat1:

res_message=u"规则12-中文语句:全角中文字符与半角英文字符和半角阿拉伯数字之间应有一个半角空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"规则12-中文语句:全角中文字符与半角英文字符和半角阿拉伯数字之间应有一个半角空格\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:全角标点符号与前后字符之间均不留空。

def rule_thirteen(aUnicodeStr):

pat1=re.compile(u'[%s]+[\u0020]+'%fullwidth_symbol_all)

pat2=re.compile(u'[\u0020]+[%s]+'%fullwidth_symbol_all)

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

if mat1 or mat2 :

res_status=check_stauts_fail_str

if mat1:

res_message=u"规则13-中文语句:全角标点符号与前后字符之间均不留空。\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"规则13-中文语句:全角标点符号与前后字符之间均不留空。\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:中文之间无空格

def rule_fourteen(aUnicodeStr):

pat1=re.compile(u'[%s]+[\u0020]+[%s]'%(chinese_code,chinese_code))

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

if mat1:

res_status=check_stauts_fail_str

res_message=u"规则14-中文语句:全角标点符号与前后字符之间均不留空。\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

'''

中文语句:以下标点符号成对出现,且有先后顺序:

全角:()、“”、‘’,《》,{},【】

半角:()、{},[]

'''

def rule_fifteen(aUnicodeStr):

res_status=check_stauts_ok_str

res_message=''

symbol_count_map={u'(':0,u')':0,u'“':0,u'”':0,u'‘':0,u'’':0,u'《':0,u'》':0,

u'{':0,u'}':0,u'【':0,u'】':0,u'(':0,u')':0,u'{':0,u'}':0,

u'[':0,u']':0}

symbol_pos_map={u'(':[],u')':[],u'“':[],u'”':[],u'‘':[],u'’':[],u'《':[],u'》':[],

u'{':[],u'}':[],u'【':[],u'】':[],u'(':[],u')':[],u'{':[],u'}':[],

u'[':[],u']':[]}

symbol_pair_map={u'(':u')',u'“':u'”',u'‘':u'’',u'《':u'》',

u'{':u'}',u'【':u'】',u'(':u')',u'{':u'}',

u'[':u']'}

#获取字符的个数

for (kT,vT) in ():

symbol_count_map[kT]=aUnicodeS(kT)

#获取字符位置

for (kT,vT) in ():

if vT==0:

continue

else:

for i in range(1,vT+1):

symbol_pos_map[kT].append(get_substr_pos(aUnicodeStr,kT,i))

#检查是否成对出现,且前后顺序正确

for (kT,vT) in ():

if symbol_count_map[kT] != symbol_count_map[vT]:

res_status=check_stauts_fail_str

res_message=u"规则15-中英文语句:()、“”、‘’,《》,{},【】 ()、{},[]必须成对出现,且有先后顺序"

elif symbol_count_map[kT] != 0:

for i in range(0,symbol_count_map[kT]):

if symbol_pos_map[kT][i]>=symbol_pos_map[vT][i]:

res_status=check_stauts_fail_str

res_message=u"规则15-中英文语句:()、“”、‘’,《》,{},【】 ()、{},[]必须成对出现,且有先后顺序"

break

if res_status == check_stauts_fail_str:

break

return (res_status,res_message)

#中文语句:中文后面的标点符号应为全角标点符号

def rule_sixteen(aUnicodeStr):

pat1=re.compile(u'[%s]+[%s]+'%(chinese_code,halfwidth_symbol))

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

if mat1:

res_status=check_stauts_fail_str

res_message=u"规则16-中文语句:中文后面的标点符号应为全角标点符号。\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:开头和结尾不能是半角、全角空格

def rule_seventeen(aUnicodeStr):

pat1=re.compile(u'^ +')

pat2=re.compile(u' +$')

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

if mat1 or mat2:

res_status=check_stauts_fail_str

if mat1:

res_message=u"规则17-中文语句:开头和结尾不能是半角、全角空格。\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"规则17-中文语句:开头和结尾不能是半角、全角空格。\n出错范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:括号中的内容为独立的语句时,句号应包含在括号内

def rule_eightteen(aUnicodeStr):

pat1=re.compile(u'(+.*。+.*)+')

pat2=re.compile(u'(+.*)+.*。+')

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

if mat1 or mat2:

res_status=check_stauts_manual_str

if mat1:

res_message=u"规则18-中文语句:括号中的内容为独立的语句时,句号应包含在括号内。请人工检查\n检查范围:%s"%("("+str()[0])+','+str()[1])+")")

else :

res_message=u"规则18-中文语句:括号中的内容为独立的语句时,句号应包含在括号内。请人工检查\n检查范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文语句:19.20.22.23.24.25.26.27.28.30.33

def rule_nineteen(aUnicodeStr):

symbol_manual_map={u'“': u"规则19-引用说话的语句或对特定词句进行强调时使用全角双引号(“”),注意前后双引号不同,请手工检查",

u'‘': u"规则20-双重引用时使用全角单引号(‘’),注意前后单引号不同,请手工检查",

u',': u"规则22-中文语句中的停顿应用全角逗号(,),请手工检查",

u'、': u"规则23-中文语句中的并列词间和中文语句中的英文并列词间均应该用全角顿号(、)分隔,而不用逗号。,请手工检查",

u'(': u"规则24-对于前一语句改换说法,或作补充说明时,使用圆括号。圆括号包括全角()和半角 () 两种形式,请手工检查",

u'(': u"规则24-对于前一语句改换说法,或作补充说明时,使用圆括号。圆括号包括全角()和半角 () 两种形式,请手工检查",

u':': u"规则25-列举项目时,使用全角冒号。2. 表示时间的 (:) 应使用半角冒号。,请手工检查",

u':': u"规则25-列举项目时,使用全角冒号。2. 表示时间的 (:) 应使用半角冒号。,请手工检查",

u'——':u"规则26-做补充说明或话题转换时使用中文全角破折号(——) ,请手工检查",

u'-': u"规则26- 当表示数值间的范围(例如日期、时间或数字),或当表示两个名词的复合,或表示图序、表序的标号时,使用英文半角连字符 (-) ,请手工检查",

u'《': u"规则27-书名、节目名、法律法规名等需要所以书名号(《》)进行标注,请手工检查 ",

u'%': u"规则28-针对占位符,如果占位符代替的是数字,则前后视情况加空格,如果代替的是中文,则无需空格,请手工检查 ",

u'%': u"规则28-针对占位符,如果占位符代替的是数字,则前后视情况加空格,如果代替的是中文,则无需空格 ,请手工检查",

u'月': u"规则30-针对日期,只有在日历里显示日期的时候不加空格,比如:2016年5月6日;在其他地方,比如设置里显示“开始于 1 月 1 日”的时候需要空格,请手工检查 ",

u'年': u"规则30-针对日期,只有在日历里显示日期的时候不加空格,比如:2016年5月6日;在其他地方,比如设置里显示“开始于 1 月 1 日”的时候需要空格,请手工检查",

u'日': u"规则30-针对日期,只有在日历里显示日期的时候不加空格,比如:2016年5月6日;在其他地方,比如设置里显示“开始于 1 月 1 日”的时候需要空格,请手工检查",

u'.': u"规则33-如果需要沿用原文中的外文缩写、外国人姓和名缩写、注册商标、产品名、公司名及国名的缩写,则用半角英文句点 (.) 来表示该缩写。3. 半角句点 (.) 也可用作数字中的小数点或文件名中的分隔符,请手工检查 ",

}

res_status=check_stauts_ok_str

res_message=''

for (kT,vT) in ():

pat1=re.compile('[%s]+'%kT)

if (aUnicodeStr):

res_status=check_stauts_manual_str

res_message=vT

break

return (res_status,res_message)

'''

引号:3. 除非引用的内容与标点符号相对独立,否则句号(。)、逗号(,)、问号(?)、感叹号(!)应保留在双引号内,

并采用全角输入。

'''

def rule_twentyone(aUnicodeStr):

pat1=re.compile(u'“+[^”]*[。,?!.\,\?\!]+')

pat2=re.compile(u'”+[。,?!.\,\?\!]+')

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

mat2=(aUnicodeStr)

if mat1 or mat2:

res_status=check_stauts_manual_str

if mat1:

res_message=u"规则21-中文语句:除非引用的内容与标点符号相对独立,否则句号(。)、逗号(,)、问号(?)、感叹号(!)应保留在双引号内,并采用全角输入\n检查范围:%s"%("("+str()[0])+','+str()[1])+")")

else :

res_message=u"规则21-中文语句:除非引用的内容与标点符号相对独立,否则句号(。)、逗号(,)、问号(?)、感叹号(!)应保留在双引号内,并采用全角输入\n检查范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

'''

数字与英文单位间加一个半角空格

'''

def rule_twentynine(aUnicodeStr):

pat1=re.compile(u'[0-9]+[  ]*[a-zA-Z]+')

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

if mat1:

res_status=check_stauts_manual_str

res_message=u"规则29-数字与英文单位间加一个半角空格\n检查范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

'''

标点符号连续出现

'''

def rule_thirtyone(aUnicodeStr):

pat1=re.compile(u'[\!\%\(\)\{\}\[\]\;\:\'\"\?\,\.。!\%()\{\}【】;:’“”’?,。、《》]{2,}')

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

if mat1:

res_status=check_stauts_manual_str

res_message=u"规则31-标点符号连续出现\n检查范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

'''

中文语句:英文字母、数字后面如果是标点符号,则应该是半角

'''

def rule_thirtytwo(aUnicodeStr):

pat1=re.compile(u'[a-zA-Z0-9]+[\!\%\(\)\{\}\[\]\;\:\'\"\?\,\.。!\%()\{\}【】;:’“”’?,。、《》]+')

res_status=check_stauts_ok_str

res_message=''

mat1=(aUnicodeStr)

if mat1:

res_status=check_stauts_manual_str

res_message=u"规则32-英文字母、数字后面如果是标点符号,则应该是半角\n检查范围:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

def get_substr_pos(aString, subStr, findCnt):

listStr = aS(subStr,findCnt)

if len(listStr) <= findCnt:

return -1

return len(aString)-len(listStr[-1])-len(subStr)

#中文语句是:含有至少一个中文(数字、标点符号不作为判断依据)

def check_iseng(aUnicodeStr):

pat1=re.compile(u'[%s]'%chinese_code)

res=True

if (aUnicodeStr):

res=False

return res

def get_unicode_str(aOriginStr):

u_string=u''

if isinstance(aOriginStr, str):

print "ordinary string"

record_log("ordinary string")

u_string = unicode(aOriginStr, c(aOriginStr)["encoding"])

elif isinstance(aOriginStr, unicode):

print "unicode string"

record_log("unicode string")

u_string=aOriginStr

else:

print "ERROR:not a string"

record_log("ERROR:not a string"+type(aOriginStr))

print type(aOriginStr)

return u_string

def rule_check_sentence(aOriginStr):

res_status=check_stauts_ok_str

res_message=''

uni_str=get_unicode_str(aOriginStr)

for i in range (0,1):

#规则1:中/英文语句:无全角英文、无全角数字、无全角空格

(res_status,res_message)=rule_one(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则17:中英文语句:开头和结尾不能是半角、全角空格

(res_status,res_message)=rule_seventeen(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则15:中英文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_fifteen(uni_str)

if res_status!=check_stauts_ok_str:

break

if check_iseng(uni_str):#英文语句

#规则4:英文语句:不含有全角标点符号、全角空格、全角数字

(res_status,res_message)=rule_four(uni_str)

if res_status!=check_stauts_ok_str:

break

else:

#规则5:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_five(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则6:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_six(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则7:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_seven(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则8:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_eight(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则9:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_nine(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则10:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_ten(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则11:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_eleven(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则12:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_twelve(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则13:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_thirteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则14:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_fourteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则16:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_sixteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#检查是否需要人工干预

#规则18:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_eightteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则19:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_nineteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则21:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_twentyone(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则29:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_twentynine(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则31:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_thirtyone(uni_str)

if res_status!=check_stauts_ok_str:

break

#规则32:中文语句:以下标点符号成对出现,且有先后顺序

(res_status,res_message)=rule_thirtytwo(uni_str)

if res_status!=check_stauts_ok_str:

break

return (res_status,res_message)

def rule_check_buffer(aBuffer):

res_map={'ok':u'检查正确语句列表:\n','manual':u'需要人工检查语句列表:\n\n','fail':u'检查错误语句列表:\n\n'}

str_array=aBu('\n')

for i in range(0,len(str_array)):

uncheck_str=str_array[i].strip('\r\n')

#print uncheck_str

res_status=check_stauts_ok_str

res_message=''

(res_status,res_message)=rule_check_sentence(uncheck_str)

if res_status==check_stauts_ok_str:

res_map['ok']+=(u"语句:"+uncheck_str+'\n')

elif res_status==check_stauts_fail_str:

res_map['fail']+=(u"语句:"+uncheck_str+'\n'+u'出错原因:'+res_message+'\n\n')

elif res_status==check_stauts_manual_str:

res_map['manual']+=(u"语句:"+uncheck_str+'\n'+u'待查原因:'+res_message+'\n\n')

else:

print "ERROR:can not check the sentence:%s"%uncheck_str

return res_map

if __name__ == '__main__':

print "This script is not for call directly。the following code is only for testing"

print rule_eleven(u"请停止(4k) 录像。")[0]

print rule_eleven(u"请停止(4k) 录像。")[1]

1.《Python中的正则表达式探究(二)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《Python中的正则表达式探究(二)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/2028130.html

上一篇

105开头是哪家银行卡看这里!福建今年一季度银行业贷款类纠纷投诉量:兴业消金第一名 兴业银行第三名

下一篇

12360绑定的银行卡怎么解绑看这里!换手机、手机号前必须要做的9件事!你都做对了吗?

0061开头的银行卡专题之中国第一大油气田日产原油突破7万吨

0061开头的银行卡专题之中国第一大油气田日产原油突破7万吨

0061开头的银行卡相关介绍,据5月25日中国石油长庆油田数字生产指挥中心屏幕显示,该公司原油日产量突破7万吨,达到7.0061万吨,今年以来原油日产创新高,也为中国石油第一大油气田长庆油田公司实现年原油产量2545万吨奠定了坚实...

0061开头的银行卡,干货看这篇!安全测试之XSS

0061开头的银行卡,干货看这篇!安全测试之XSS

0061开头的银行卡相关介绍,用于安全测试的站点间脚本攻击(XSS) 前言 随着互联网的不断发展,web应用程序的交互也越来越强。 但正如一个硬币会有两面一样,在用户体验提升的同时安全风险也会跟着有所增加。今天,我们就来讲一讲we...

0061开头的银行卡看这里!安全测试之XSS

0061开头的银行卡看这里!安全测试之XSS

0061开头的银行卡相关介绍,用于安全测试的站点间脚本攻击(XSS) 前言 随着互联网的不断发展,web应用程序的交互也越来越强。 但正如一个硬币会有两面一样,在用户体验提升的同时安全风险也会跟着有所增加。今天,我们就来讲一讲we...

0061开头的银行卡专题之安全测试之XSS

0061开头的银行卡专题之安全测试之XSS

0061开头的银行卡相关介绍,用于安全测试的站点间脚本攻击(XSS) 前言 随着互联网的不断发展,web应用程序的交互也越来越强。 但正如一个硬币会有两面一样,在用户体验提升的同时安全风险也会跟着有所增加。今天,我们就来讲一讲we...

【0061开头的银行卡】专题空头底牌罕见曝光 明日或将有惊喜?

【0061开头的银行卡】专题空头底牌罕见曝光 明日或将有惊喜?

0061开头的银行卡相关介绍,====读取全文==== 上海手指的收缩量上升了0.11%,夺回了3200个中字头股发力保护队 今天,a股围绕3200点整数继续整顿。 两市双双低开,沪指开盘即跌破3200点,随后呈现震荡下行走势。午...

【0061开头的银行卡】从以三打头的词语,学中国文史哲03

  • 【0061开头的银行卡】从以三打头的词语,学中国文史哲03
  • 【0061开头的银行卡】从以三打头的词语,学中国文史哲03
  • 【0061开头的银行卡】从以三打头的词语,学中国文史哲03