python 正则表达式:
调用re模块:注意用findall返回的是列表
概括字符集:\d \D
\w :a-z/A-Z/0-9 单词字符 \W 非单词字符
\s :匹配空白字符 如 \n \t 空格 \n
\S:非空白字符
匹配汉字:"[\u4e00-\u9fA5]"
#.匹配除换行符\n之外其他所有字符
数量词:
当我在正则匹配中遇到一个问题 :
#这是源码:
line5 = "xxx出生于2008年6月5日"
match_object = ".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|[月/-]\d{1,2}[日]|[月/-]$|$))"
r = re.match(match_object,line2)
print(r.group(1))
无论如何 都匹配不到“日”
最后发现 如果匹配到了第一个符合的 就不会匹配了:切记一点
在正则中 需要匹配最长的字符串 然后在匹配其他的:
下面是改良版的:
match_object = ".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}[日]|[月/-]$|$|[月/-]\d{1,2}))"
改变一下匹配的位置即可。
def filter_tags(content): ###对网页源码做处理,保留文本内容
re_cdata = re.compile('//<!\[CDATA\[[^>]*//\]\]>', re.I) # 匹配CDATA /<![CDATA[
re_script = re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>', re.I) # Script ===========
re_style = re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>', re.I) # style ==========
re_br = re.compile('<br\s*?/?>') # 处理br ========
re_h = re.compile('</?\w+[^>]*>') # HTML标签
re_comment = re.compile('<!--[^>]*-->') # HTML注释 ========
re_rn = re.compile('\\r|\\n|\\t') # 处理换行和制表符 ======
re_xa = re.compile('\xa0') # 处理空白符 ======
re_s = re.compile('\s') # 处理空格 =======
s = re_cdata.sub('', content) # 去掉CDATA
s = re_script.sub('', s) # 去掉SCRIPT
s = re_style.sub('', s) # 去掉style
s = re_br.sub('', s) # 将br转换为换行
s = re_h.sub('', s) # 去掉HTML 标签
s = re_comment.sub('', s) # 去掉HTML注释
s = re_rn.sub('', s) # 去掉换行空格=====
s = re_xa.sub('', s) # 去掉空白符=====
s = re_s.sub('', s) # 去掉空格======
return s
if __name__ == '__main__':
print(filter_tags(content))