丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

Python中的正則表達(dá)式探究(二)

本文以作者實(shí)際工作的中文和英文語句語法檢查工具為例,說明正則表達(dá)式的用法。

#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'#中文句號(hào)

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'#圓括號(hào)左半部(

fullwidth_round_bracket_right=u'\uff09'#圓括號(hào)右半部)

fullwidth_book_left=u'\u300a'#書名號(hào)左半部《

fullwidth_book_right=u'\u300b'#書名號(hào)右半部》

fullwidth_colon=u'\uff1a'#中文冒號(hào):

fullwidth_dash=u'\u2014\u2014'#中文破折號(hào)——

fullwidth_percent=u'\uff05'#中文百分號(hào)%

halfwidth_dash=u'\u002d'#-

halfwidth_percent=u'\u0025'#百分號(hào)%

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()

#需要人工檢查的標(biāo)點(diǎn)符號(hào)

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

#所有已知的標(biāo)點(diǎn)符號(hào)(包括全角、半角)

all_symbol=fullwidth_common_symbol+ \

halfwidth_symbol+ \

special_sysmbol

#所有全角標(biāo)點(diǎn)符號(hào)(不包括空格)

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

#中/英文語句:無全角英文、無全角數(shù)字、全角空格

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'規(guī)則1-中英文語句:不能含有全角英文、全角數(shù)字、全角空格\n出錯(cuò)范圍:%s'%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#英文語句:不含有全角標(biāo)點(diǎn)符號(hào)、全角空格、全角數(shù)字

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"規(guī)則4-英文語句:不能含有非ascii碼字符\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:結(jié)尾必須是全角標(biāo)點(diǎn)符號(hào)或無標(biāo)點(diǎn)

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"規(guī)則5-中文語句:結(jié)尾必須是全角標(biāo)點(diǎn)符號(hào)或無標(biāo)點(diǎn)符號(hào)\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:英文字母、數(shù)字之間如果有標(biāo)點(diǎn)符號(hào),必須為半角

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"規(guī)則6-中文語句:英文字母、數(shù)字之間如果有標(biāo)點(diǎn)符號(hào),必須為半角\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:中文前后標(biāo)點(diǎn)符號(hào),必須為全角

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"規(guī)則7-中文語句:中文前后標(biāo)點(diǎn)符號(hào),必須為全角\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"規(guī)則7-中文語句:中文前后標(biāo)點(diǎn)符號(hào),必須為全角\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

#return (res_status,res_message)

return (check_stauts_ok_str,'')

#中文語句:全角雙引號(hào)(“”)中可出現(xiàn)單引號(hào),反之不可以

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"規(guī)則8-中文語句:全角雙引號(hào)(“”)中可出現(xiàn)單引號(hào)‘’,反之不可以\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

elif mat2:

res_message=u"規(guī)則8-中文語句:全角雙引號(hào)(“”)中可出現(xiàn)單引號(hào)‘’,反之不可以\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

else :

res_message=u"規(guī)則8-中文語句:全角雙引號(hào)(“”)中可出現(xiàn)單引號(hào)‘’,反之不可以\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:全角雙引號(hào)內(nèi)不允許含有全角分號(hào)、冒號(hào)

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"規(guī)則9-中文語句:全角雙引號(hào)內(nèi)不允許含有全角分號(hào)、冒號(hào)\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"規(guī)則9-中文語句:全角雙引號(hào)內(nèi)不允許含有全角分號(hào)、冒號(hào)\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:括號(hào)內(nèi)包含純中文或同時(shí)包含中文及英文和數(shù)字時(shí),使用全角括號(hào),括號(hào)前后不加空格。

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"規(guī)則10-中文語句:括號(hào)內(nèi)包含純中文或同時(shí)包含中文及英文和數(shù)字時(shí),使用全角括號(hào),括號(hào)前后不加空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

elif mat2:

res_message=u"規(guī)則10-中文語句:括號(hào)內(nèi)包含純中文或同時(shí)包含中文及英文和數(shù)字時(shí),使用全角括號(hào),括號(hào)前后不加空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

elif mat3:

res_message=u"規(guī)則10-中文語句:括號(hào)內(nèi)包含純中文或同時(shí)包含中文及英文和數(shù)字時(shí),使用全角括號(hào),括號(hào)前后不加空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

elif mat4:

res_message=u"規(guī)則10-中文語句:括號(hào)內(nèi)包含純中文或同時(shí)包含中文及英文和數(shù)字時(shí),使用全角括號(hào),括號(hào)前后不加空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

else :

res_message=u"規(guī)則10-中文語句:括號(hào)內(nèi)包含純中文或同時(shí)包含中文及英文和數(shù)字時(shí),使用全角括號(hào),括號(hào)前后不加空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:括號(hào)內(nèi)的內(nèi)容為純英文、純數(shù)字或純半角英文符號(hào)時(shí),使用半角括號(hào),括號(hào)前后加半角空格。

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"規(guī)則11-中文語句:括號(hào)內(nèi)的內(nèi)容為純英文、純數(shù)字或純半角英文符號(hào)時(shí),使用半角括號(hào),括號(hào)前后加半角空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

if mat2:

res_message=u"規(guī)則11-中文語句:括號(hào)內(nèi)的內(nèi)容為純英文、純數(shù)字或純半角英文符號(hào)時(shí),使用半角括號(hào),括號(hào)前后加半角空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

elif mat3:

res_message=u"規(guī)則11-中文語句:括號(hào)內(nèi)的內(nèi)容為純英文、純數(shù)字或純半角英文符號(hào)時(shí),使用半角括號(hào),括號(hào)前后加半角空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

#elif mat4:

# res_message=u"規(guī)則11-中文語句:括號(hào)內(nèi)的內(nèi)容為純英文、純數(shù)字或純半角英文符號(hào)時(shí),使用半角括號(hào),括號(hào)前后加半角空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

elif mat5:

res_message=u"規(guī)則11-中文語句:括號(hào)內(nèi)的內(nèi)容為純英文、純數(shù)字或純半角英文符號(hào)時(shí),使用半角括號(hào),括號(hào)前后加半角空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

elif mat6:

res_message=u"規(guī)則11-中文語句:括號(hào)內(nèi)的內(nèi)容為純英文、純數(shù)字或純半角英文符號(hào)時(shí),使用半角括號(hào),括號(hào)前后加半角空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"規(guī)則11-中文語句:括號(hào)內(nèi)的內(nèi)容為純英文、純數(shù)字或純半角英文符號(hào)時(shí),使用半角括號(hào),括號(hào)前后加半角空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:全角中文字符與半角英文字符和半角阿拉伯?dāng)?shù)字之間應(yīng)有一個(gè)半角空格

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"規(guī)則12-中文語句:全角中文字符與半角英文字符和半角阿拉伯?dāng)?shù)字之間應(yīng)有一個(gè)半角空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"規(guī)則12-中文語句:全角中文字符與半角英文字符和半角阿拉伯?dāng)?shù)字之間應(yīng)有一個(gè)半角空格\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:全角標(biāo)點(diǎn)符號(hào)與前后字符之間均不留空。

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"規(guī)則13-中文語句:全角標(biāo)點(diǎn)符號(hào)與前后字符之間均不留空。\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"規(guī)則13-中文語句:全角標(biāo)點(diǎn)符號(hào)與前后字符之間均不留空。\n出錯(cuò)范圍:%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"規(guī)則14-中文語句:全角標(biāo)點(diǎn)符號(hào)與前后字符之間均不留空。\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

'''

中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序:

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

半角:()、{},[]

'''

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']'}

#獲取字符的個(gè)數(shù)

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))

#檢查是否成對(duì)出現(xiàn),且前后順序正確

for (kT,vT) in ():

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

res_status=check_stauts_fail_str

res_message=u"規(guī)則15-中英文語句:()、“”、‘’,《》,{},【】 ()、{},[]必須成對(duì)出現(xiàn),且有先后順序"

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"規(guī)則15-中英文語句:()、“”、‘’,《》,{},【】 ()、{},[]必須成對(duì)出現(xiàn),且有先后順序"

break

if res_status == check_stauts_fail_str:

break

return (res_status,res_message)

#中文語句:中文后面的標(biāo)點(diǎn)符號(hào)應(yīng)為全角標(biāo)點(diǎn)符號(hào)

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"規(guī)則16-中文語句:中文后面的標(biāo)點(diǎn)符號(hào)應(yīng)為全角標(biāo)點(diǎn)符號(hào)。\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:開頭和結(jié)尾不能是半角、全角空格

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"規(guī)則17-中文語句:開頭和結(jié)尾不能是半角、全角空格。\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

else:

res_message=u"規(guī)則17-中文語句:開頭和結(jié)尾不能是半角、全角空格。\n出錯(cuò)范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

#中文語句:括號(hào)中的內(nèi)容為獨(dú)立的語句時(shí),句號(hào)應(yīng)包含在括號(hào)內(nèi)

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"規(guī)則18-中文語句:括號(hào)中的內(nèi)容為獨(dú)立的語句時(shí),句號(hào)應(yīng)包含在括號(hào)內(nèi)。請(qǐng)人工檢查\n檢查范圍:%s"%("("+str()[0])+','+str()[1])+")")

else :

res_message=u"規(guī)則18-中文語句:括號(hào)中的內(nèi)容為獨(dú)立的語句時(shí),句號(hào)應(yīng)包含在括號(hào)內(nèi)。請(qǐng)人工檢查\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"規(guī)則19-引用說話的語句或?qū)μ囟ㄔ~句進(jìn)行強(qiáng)調(diào)時(shí)使用全角雙引號(hào)(“”),注意前后雙引號(hào)不同,請(qǐng)手工檢查",

u'‘': u"規(guī)則20-雙重引用時(shí)使用全角單引號(hào)(‘’),注意前后單引號(hào)不同,請(qǐng)手工檢查",

u',': u"規(guī)則22-中文語句中的停頓應(yīng)用全角逗號(hào)(,),請(qǐng)手工檢查",

u'、': u"規(guī)則23-中文語句中的并列詞間和中文語句中的英文并列詞間均應(yīng)該用全角頓號(hào)(、)分隔,而不用逗號(hào)。,請(qǐng)手工檢查",

u'(': u"規(guī)則24-對(duì)于前一語句改換說法,或作補(bǔ)充說明時(shí),使用圓括號(hào)。圓括號(hào)包括全角()和半角 () 兩種形式,請(qǐng)手工檢查",

u'(': u"規(guī)則24-對(duì)于前一語句改換說法,或作補(bǔ)充說明時(shí),使用圓括號(hào)。圓括號(hào)包括全角()和半角 () 兩種形式,請(qǐng)手工檢查",

u':': u"規(guī)則25-列舉項(xiàng)目時(shí),使用全角冒號(hào)。2. 表示時(shí)間的 (:) 應(yīng)使用半角冒號(hào)。,請(qǐng)手工檢查",

u':': u"規(guī)則25-列舉項(xiàng)目時(shí),使用全角冒號(hào)。2. 表示時(shí)間的 (:) 應(yīng)使用半角冒號(hào)。,請(qǐng)手工檢查",

u'——':u"規(guī)則26-做補(bǔ)充說明或話題轉(zhuǎn)換時(shí)使用中文全角破折號(hào)(——) ,請(qǐng)手工檢查",

u'-': u"規(guī)則26- 當(dāng)表示數(shù)值間的范圍(例如日期、時(shí)間或數(shù)字),或當(dāng)表示兩個(gè)名詞的復(fù)合,或表示圖序、表序的標(biāo)號(hào)時(shí),使用英文半角連字符 (-) ,請(qǐng)手工檢查",

u'《': u"規(guī)則27-書名、節(jié)目名、法律法規(guī)名等需要所以書名號(hào)(《》)進(jìn)行標(biāo)注,請(qǐng)手工檢查 ",

u'%': u"規(guī)則28-針對(duì)占位符,如果占位符代替的是數(shù)字,則前后視情況加空格,如果代替的是中文,則無需空格,請(qǐng)手工檢查 ",

u'%': u"規(guī)則28-針對(duì)占位符,如果占位符代替的是數(shù)字,則前后視情況加空格,如果代替的是中文,則無需空格 ,請(qǐng)手工檢查",

u'月': u"規(guī)則30-針對(duì)日期,只有在日歷里顯示日期的時(shí)候不加空格,比如:2016年5月6日;在其他地方,比如設(shè)置里顯示“開始于 1 月 1 日”的時(shí)候需要空格,請(qǐng)手工檢查 ",

u'年': u"規(guī)則30-針對(duì)日期,只有在日歷里顯示日期的時(shí)候不加空格,比如:2016年5月6日;在其他地方,比如設(shè)置里顯示“開始于 1 月 1 日”的時(shí)候需要空格,請(qǐng)手工檢查",

u'日': u"規(guī)則30-針對(duì)日期,只有在日歷里顯示日期的時(shí)候不加空格,比如:2016年5月6日;在其他地方,比如設(shè)置里顯示“開始于 1 月 1 日”的時(shí)候需要空格,請(qǐng)手工檢查",

u'.': u"規(guī)則33-如果需要沿用原文中的外文縮寫、外國人姓和名縮寫、注冊(cè)商標(biāo)、產(chǎn)品名、公司名及國名的縮寫,則用半角英文句點(diǎn) (.) 來表示該縮寫。3. 半角句點(diǎn) (.) 也可用作數(shù)字中的小數(shù)點(diǎn)或文件名中的分隔符,請(qǐng)手工檢查 ",

}

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)

'''

引號(hào):3. 除非引用的內(nèi)容與標(biāo)點(diǎn)符號(hào)相對(duì)獨(dú)立,否則句號(hào)(。)、逗號(hào)(,)、問號(hào)(?)、感嘆號(hào)(!)應(yīng)保留在雙引號(hào)內(nèi),

并采用全角輸入。

'''

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"規(guī)則21-中文語句:除非引用的內(nèi)容與標(biāo)點(diǎn)符號(hào)相對(duì)獨(dú)立,否則句號(hào)(。)、逗號(hào)(,)、問號(hào)(?)、感嘆號(hào)(!)應(yīng)保留在雙引號(hào)內(nèi),并采用全角輸入\n檢查范圍:%s"%("("+str()[0])+','+str()[1])+")")

else :

res_message=u"規(guī)則21-中文語句:除非引用的內(nèi)容與標(biāo)點(diǎn)符號(hào)相對(duì)獨(dú)立,否則句號(hào)(。)、逗號(hào)(,)、問號(hào)(?)、感嘆號(hào)(?。?yīng)保留在雙引號(hào)內(nèi),并采用全角輸入\n檢查范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

'''

數(shù)字與英文單位間加一個(gè)半角空格

'''

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"規(guī)則29-數(shù)字與英文單位間加一個(gè)半角空格\n檢查范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

'''

標(biāo)點(diǎn)符號(hào)連續(xù)出現(xiàn)

'''

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"規(guī)則31-標(biāo)點(diǎn)符號(hào)連續(xù)出現(xiàn)\n檢查范圍:%s"%("("+str()[0])+','+str()[1])+")")

return (res_status,res_message)

'''

中文語句:英文字母、數(shù)字后面如果是標(biāo)點(diǎn)符號(hào),則應(yīng)該是半角

'''

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"規(guī)則32-英文字母、數(shù)字后面如果是標(biāo)點(diǎn)符號(hào),則應(yīng)該是半角\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)

#中文語句是:含有至少一個(gè)中文(數(shù)字、標(biāo)點(diǎn)符號(hào)不作為判斷依據(jù))

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):

#規(guī)則1:中/英文語句:無全角英文、無全角數(shù)字、無全角空格

(res_status,res_message)=rule_one(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則17:中英文語句:開頭和結(jié)尾不能是半角、全角空格

(res_status,res_message)=rule_seventeen(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則15:中英文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_fifteen(uni_str)

if res_status!=check_stauts_ok_str:

break

if check_iseng(uni_str):#英文語句

#規(guī)則4:英文語句:不含有全角標(biāo)點(diǎn)符號(hào)、全角空格、全角數(shù)字

(res_status,res_message)=rule_four(uni_str)

if res_status!=check_stauts_ok_str:

break

else:

#規(guī)則5:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_five(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則6:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_six(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則7:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_seven(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則8:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_eight(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則9:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_nine(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則10:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_ten(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則11:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_eleven(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則12:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_twelve(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則13:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_thirteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則14:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_fourteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則16:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_sixteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#檢查是否需要人工干預(yù)

#規(guī)則18:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_eightteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則19:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_nineteen(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則21:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_twentyone(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則29:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_twentynine(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則31:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(res_status,res_message)=rule_thirtyone(uni_str)

if res_status!=check_stauts_ok_str:

break

#規(guī)則32:中文語句:以下標(biāo)點(diǎn)符號(hào)成對(duì)出現(xiàn),且有先后順序

(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'檢查錯(cuò)誤語句列表:\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'出錯(cuò)原因:'+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"請(qǐng)停止(4k) 錄像。")[0]

print rule_eleven(u"請(qǐng)停止(4k) 錄像。")[1]

1.《Python中的正則表達(dá)式探究(二)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁腳下方聯(lián)系方式。

2.《Python中的正則表達(dá)式探究(二)》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/caijing/2028130.html

上一篇

105開頭是哪家銀行卡看這里!福建今年一季度銀行業(yè)貸款類糾紛投訴量:興業(yè)消金第一名 興業(yè)銀行第三名

下一篇

12360綁定的銀行卡怎么解綁看這里!換手機(jī)、手機(jī)號(hào)前必須要做的9件事!你都做對(duì)了嗎?

0061開頭的銀行卡專題之中國第一大油氣田日產(chǎn)原油突破7萬噸

0061開頭的銀行卡專題之中國第一大油氣田日產(chǎn)原油突破7萬噸

0061開頭的銀行卡相關(guān)介紹,據(jù)5月25日中國石油長慶油田數(shù)字生產(chǎn)指揮中心屏幕顯示,該公司原油日產(chǎn)量突破7萬噸,達(dá)到7.0061萬噸,今年以來原油日產(chǎn)創(chuàng)新高,也為中國石油第一大油氣田長慶油田公司實(shí)現(xiàn)年原油產(chǎn)量2545萬噸奠定了堅(jiān)實(shí)...

0061開頭的銀行卡,干貨看這篇!安全測(cè)試之XSS

0061開頭的銀行卡,干貨看這篇!安全測(cè)試之XSS

0061開頭的銀行卡相關(guān)介紹,用于安全測(cè)試的站點(diǎn)間腳本攻擊(XSS) 前言 隨著互聯(lián)網(wǎng)的不斷發(fā)展,web應(yīng)用程序的交互也越來越強(qiáng)。 但正如一個(gè)硬幣會(huì)有兩面一樣,在用戶體驗(yàn)提升的同時(shí)安全風(fēng)險(xiǎn)也會(huì)跟著有所增加。今天,我們就來講一講we...

0061開頭的銀行卡看這里!安全測(cè)試之XSS

0061開頭的銀行卡看這里!安全測(cè)試之XSS

0061開頭的銀行卡相關(guān)介紹,用于安全測(cè)試的站點(diǎn)間腳本攻擊(XSS) 前言 隨著互聯(lián)網(wǎng)的不斷發(fā)展,web應(yīng)用程序的交互也越來越強(qiáng)。 但正如一個(gè)硬幣會(huì)有兩面一樣,在用戶體驗(yàn)提升的同時(shí)安全風(fēng)險(xiǎn)也會(huì)跟著有所增加。今天,我們就來講一講we...

0061開頭的銀行卡專題之安全測(cè)試之XSS

0061開頭的銀行卡專題之安全測(cè)試之XSS

0061開頭的銀行卡相關(guān)介紹,用于安全測(cè)試的站點(diǎn)間腳本攻擊(XSS) 前言 隨著互聯(lián)網(wǎng)的不斷發(fā)展,web應(yīng)用程序的交互也越來越強(qiáng)。 但正如一個(gè)硬幣會(huì)有兩面一樣,在用戶體驗(yàn)提升的同時(shí)安全風(fēng)險(xiǎn)也會(huì)跟著有所增加。今天,我們就來講一講we...

【0061開頭的銀行卡】專題空頭底牌罕見曝光 明日或?qū)⒂畜@喜?

【0061開頭的銀行卡】專題空頭底牌罕見曝光 明日或?qū)⒂畜@喜?

0061開頭的銀行卡相關(guān)介紹,====讀取全文==== 上海手指的收縮量上升了0.11%,奪回了3200個(gè)中字頭股發(fā)力保護(hù)隊(duì) 今天,a股圍繞3200點(diǎn)整數(shù)繼續(xù)整頓。 兩市雙雙低開,滬指開盤即跌破3200點(diǎn),隨后呈現(xiàn)震蕩下行走勢(shì)。午...

【0061開頭的銀行卡】從以三打頭的詞語,學(xué)中國文史哲03

  • 【0061開頭的銀行卡】從以三打頭的詞語,學(xué)中國文史哲03
  • 【0061開頭的銀行卡】從以三打頭的詞語,學(xué)中國文史哲03
  • 【0061開頭的銀行卡】從以三打頭的詞語,學(xué)中國文史哲03