本文件中将记录一下正则表达式使用方法,以及具体案例
正则语句
元字符
[A-Z] # 匹配从A到Z的所有大写字母
[a-z] # 匹配从a到z的所有小写字母
[A-z] # 匹配大小写字母以及[,^等ASCII字符表中的任意字符
[0-9] # 任何一个数字字符
[A-Z0-9] # 匹配大写字母及数字
\d # 任何一个数字字符,等价于[0-9]
\D # 任何一个非数字字符,等价于[^0-9]
\W # 任何一个字母数字字符(大小写均可)及下划线,等价于[a-zA-Z0-9_]
\w # 等价于[^a-zA-Z0-9_]
[\u4e00-\u9fa5] # 匹配中文
重复匹配
+ # 表示匹配一个或多个(至少一个)
? # 表示匹配零个或者一个
* # 表示有或者没有
{3} # 表示重复三次
{3-5} # 表示重复次数在3-5之间
{3,} # 表示重复三次及以上
懒惰匹配
+? # +的懒惰模式
*? # *的懒惰模式
{n,} # {n,}的懒惰模式
向前查看和向后查看
肯定式向前查看
(?=)
肯定式向后查看
(?<=)
使用方法
获得指定字段
p = re.compile('#re#') # #re#表示正则表达式
text = p.findall(text_raw) # text_raw表示原始字符串
正则案例
匹配文章名
str = '金莲花,王华.财务共享服务中心的应用效果研究[J].会计之友,2016(05):21-24.'
p = re.compile('(?<=\.).+(?=\[)')
p.findall(ref_str)[0] # 财务共享服务中心的应用效果研究
同一作者匹配
author_list = ['赵峻峰', '丁丹']
pattern = '(?=.*{})'.format(')(?=.*'.join(author)) # '(?=.*赵峻峰)(?=.*丁丹)'
df_final = result[result['author'].str.contains(pattern, regex=True)]