Python正则表达式简介


Python正则表达式简介文章插图
假设你要根据给定的查询搜索某个内容 。 如果你只依靠一个字符串 , 你就得不到你想要的东西 。 那么 , 如何在海量信息中寻找你需要的东西呢?
当然 , 你需要一个模式来识别你想要查找的字符串 。 为此 , 我们可以使用正则表达式(Regular Expression , Regex) 。
在本文中 , 我将向你展示它的概念和应用 , 以解决数据科学中的问题 , 特别是使用Python对文本进行预处理 。
大纲我将本文分为两个部分:

  • 正则表达式的概念
  • 正则表达式的应用
正则表达式的概念正则表达式 , 或者我们称之为Regex或RE , 是一种特殊类型的字符串 , 可用于匹配字符串中的术语或单词 。
它由特殊字符序列组成 , 因此我们可以根据需要使用它来匹配任何术语 。 这里有几个你可以使用的特殊字符 ,
  • 点符号(.)匹配字符串中的任何字符 ,
  • 插入符号(^)与字符串的开头匹配 ,
  • 美元符号($)与字符串的结尾匹配 ,
  • 星号(*)与前一个字符的模式重复零次或多次匹配 ,
  • 加号(+)匹配前一个字符的一个或多个重复 ,
  • 问号(?)匹配上一个字符的0或1个重复 ,
  • 花括号{m , n}将匹配前一个字符的m或n个重复 ,
  • 如果要使用标点符号 , 可以使用反斜杠(\) , 但它也是一个特殊字符 。 例如 , 为了匹配$ , 你应该在“\$”这样的字符前面添加一个反斜杠 ,
  • 方括号([])只能用于包含与字符串匹配的某些字符 。 假设你想找到包含a、i和r的单词 , 可以使用类似[air]的模式 。
回想一下反斜杠有几个特殊的序列 。 如果你想包含所有的单词或数字而不把它们都写在方括号内 , 这是非常有用的 。 你可以使用这些序列 , 例如 ,
  • \d将匹配任何数字
  • \s将匹配空白字符
  • \w将匹配任何字符
  • \D匹配除数字外的字符
  • \S匹配除空格外的字符
  • \W匹配除字符外的字符
对于这些特殊字符 , 你可以根据要提取的术语组合它们 。 例如 , 你想要从tweet列表中检索hashtags , 可以使用类似“#\w+”的模式 。
模式的组合也是可以的 , 因为有一条规则说 ,
如果一个模式与一个模式结合 , 就会产生另一个模式 。
正则表达式的应用在你了解了Regex的概念之后 , 现在让我们看看如何将其应用于处理文本 。
第一种方法是删除我们不用于处理文本的术语 。 假设你要对tweet集合进行文本挖掘 。 因此 , 在挖掘tweet之前 , 必须先对它们进行预处理 , 因为我们希望使我们的计算更有效 , 并避免其中任何无意义的信息 。 例如 , 你有这样一条微博 ,
#Nasional Wapres: Jumlah Orang Miskin Bertambah Gara-Gara Pandemi Covid-19 有几个术语你想删除 , 比如提及 , 标签 , 链接等 。 在Python中 , 我们可以使用一个名为sub的方法从re库中删除这些术语 。
我们可以将参数设置到函数中 , 例如regex格式的模式、用于替换术语的字符串 , 最后是要处理的字符串 。
re.sub(pattern, replacement, data) - pattern: 正则表达式的模式- replacement: 要替换的字符串- data: 要处理的变量或字符串通过使用这个函数 , 我们可以像这样使用它
import re# 原始微博tweet = "#Nasional Wapres: Jumlah Orang Miskin Bertambah Gara-Gara Pandemi Covid-19 "# 使用正则表达式进行预处理tweet = re.sub("#\w+", "", tweet)tweet = re.sub("https*.+", "", tweet)print(tweet)# 这是结果,#Wapres: Jumlah Orang Miskin Bertambah Gara-Gara Pandemi Covid-19