数据提取-正则表达式基本使用

正则表达式

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。

常用的特殊字符

模式描述
^匹配字符串的开头
$匹配字符串的末尾。
.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[…]用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
[^…]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re*匹配0个或多个的表达式。
re+匹配1个或多个的表达式。
re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{n}精确匹配 n 个前面表达式。例如, o{2} 不能匹配 “Bob” 中的 “o”,但是能匹配 “food” 中的两个 o。
re{n,}匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。“o{1,}” 等价于 “o+”。“o{0,}” 则等价于 “o*”。
re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a | b匹配a或b
(re)匹配括号内的表达式,也表示一个组
\w匹配字母数字及下划线
\W匹配非字母数字及下划线
\s匹配任意空白字符,等价于 [\t\n\r\f].
\S匹配任意非空字符
\d匹配任意数字,等价于 [0-9].
\D匹配任意非数字
\b匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\1匹配第1个分组的内容。

常用的函数

函数描述
re.match(pattern, string, flags=0)从字符串起始位置开始匹配,如果匹配失败直接返回none
re.search(pattern, string, flags=0)扫描整个字符串并返回第一个成功的匹配
re.findall(pattern, string, flags=0)找出所有满足条件的,返回一个列表
re.sub(pattern, repl, string, count=0, flags=0)用来替换字符串
re.compile(pattern[, flags])用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
re.split(pattern, string[, maxsplit=0, flags=0])使用正则来分割字符串

分组

在正则表达式中,可以对过滤到的字符串进行分组,分组使用圆括号的方式

  • group:和group(0)等价,返回的是满足条件的字符串
  • groups:返回的是里面的子组,索引从1开始
  • group(1):返回的是第一个子组

爬取古诗词文网的re应用示例

import re
import requests

url = "https://www.gushiwen.org/"
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
r = requests.get(url,headers=headers)
text = r.text



title = re.findall(r'<a style="font-size:18px; line-height:22px; height:22px;".*?<b>(.*?)</b>',text,re.DOTALL)
dynasty = re.findall(r'<p class="source".*?<a.*?target="_blank">(.*?)</a>.*?<a.*?target="_blank">(.*?)</a>',text,re.DOTALL)
contents = re.findall(r'<div class="contson".*?>(.*?)</div>',text,re.DOTALL)


print("诗:\n",title)
print("朝代,诗人:\n",dynasty)
print("诗句:\n")
for x in contents:
    content = re.sub(r'<.*?>','',x).strip()
    print(content)

运行结果

古诗文网站的部分示例代码
在这里插入图片描述

古诗文网页部分源码

</div>
<p><a style="font-size:18px; line-height:22px; height:22px;" href="https://so.gushiwen.org/shiwenv_a6e94e8938d4.aspx" target="_blank"><b>落花时·夕阳谁唤下楼梯</b></a></p>
<p class="source"><a href="/shiwen/default.aspx?cstr=%e6%b8%85%e4%bb%a3" target="_blank">清代</a><span></span><a href="https://so.gushiwen.org/search.aspx?value=%e7%ba%b3%e5%85%b0%e6%80%a7%e5%be%b7" target="_blank">纳兰性德</a></p>
<div class="contson" id="contsona6e94e8938d4">
夕阳谁唤下楼梯,一握香荑。回头忍笑阶前立,总无语,也依依。<br />笺书直恁无凭据,休说相思。劝伊好向红窗醉,须莫及,落花时。
</div>

参考链接 :

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 正则表达式在编程主要用于字符串匹配和模式识别。它可以被用于验证输入的有效性,如邮件地址、电话号码等;还可以用于搜索和替换文本的内容,以及从大量文本数据提取有用信息。 常用编程语言,如 Python、Java、C++ 等都内置了正则表达式库,开发者可以直接调用这些库的函数实现正则表达式的功能。 例如在 Python ,可以使用 `re` 库的 `re.search` 函数在字符串搜索符合正则表达式的内容,以下是一个简单的例子: ```python import re text = "My phone number is 123-456-7890" phone_number_regex = r'\d{3}-\d{3}-\d{4}' match = re.search(phone_number_regex, text) if match: print("Phone number found:", match.group()) else: print("Phone number not found") ``` 输出结果: ``` Phone number found: 123-456-7890 ``` ### 回答2: 正则表达式是一种用来匹配字符串模式的工具,能够帮助快速有效地在文本搜索、替换、验证和提取字符串。在编程,可以通过正则表达式来实现以下功能: 1. 搜索匹配:使用正则表达式可以在字符串快速搜索匹配指定模式的文本。比如,可以使用正则表达式搜索一个字符串是否存在某个特定的单词或字符序列。 2. 替换文本:正则表达式还可以用来替换字符串匹配到的文本。通过指定一个正则表达式和替换字符串,可以将匹配到的文本快速替换为指定的内容。 3. 字符串验证:正则表达式也可以用来验证一个字符串是否符合特定的模式。比如,可以使用一个正则表达式验证一个字符串是否符合电话号码的格式。 4. 提取数据使用正则表达式可以从字符串提取出符合特定模式的数据。比如,可以使用正则表达式提取一个字符串的所有数字或Email地址。 5. 校验输入:在输入验证方面,正则表达式可以用来校验用户输入的数据。比如,我们可以使用正则表达式来验证用户输入的邮箱地址或密码是否符合要求。 总之,正则表达式是一种强大、灵活且广泛应用于编程的工具。掌握正则表达式使用可以极大地提高处理字符串的效率和准确性。 ### 回答3: 正则表达式(Regular Expression)在编程被广泛使用,用于处理和匹配文本数据。它是一种强大的字符串匹配和替换工具,具有简洁高效的特点。 在编程正则表达式可以用于以下场景: 1. 文本匹配:通过正则表达式可以根据规则匹配特定模式的文本,比如检查字符串是否符合特定的格式要求。例如,可以使用正则表达式验证一个电话号码是否是有效的手机号。 2. 字符串替换:正则表达式可以替换文本字符串的某些部分。例如,可以使用正则表达式将一个文本所有的邮箱地址替换为特定的字符串。 3. 数据提取:在文本提取特定的信息。正则表达式可以帮助我们从一个字符串提取出需要的数据,如提取出一个网页的所有链接。 4. 输入验证:在编程过程,可以使用正则表达式验证用户输入的合法性。例如,可以使用正则表达式验证用户输入的密码是否符合规定的复杂度要求。 5. 日志分析:在大规模数据正则表达式可以帮助我们快速定位和提取所需要的信息。例如,在服务器日志,可以使用正则表达式提取出指定时间段内的错误信息。 总而言之,正则表达式是编程非常有用的工具,能够帮助我们快速处理和匹配文本数据。在不同编程语言,都有内置的正则表达式库,可以轻松地调用和运用。掌握正则表达式基本语法和应用技巧,对于编程工作和文本处理非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值