正则表达式

本文件中将记录一下正则表达式使用方法,以及具体案例

正则语句

元字符

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

最后更新于