re正则的使用

import re

# findall匹配所以得结果, 返回一个列表
res = re.findall(r"\d+", "你好啊, 你手机号是多少?, 是12345678啊, 我手机是87654321啊")
for i in res:
    print(i) # 12345678 87654321

# finditer 匹配所有结果, 返回一个迭代器, 每个元素是一个re.Match对象, group()获取匹配结果
res = re.finditer(r"\d+", "你好啊, 你手机号是多少?, 是12345678啊, 我手机是87654321啊")
for i in res:
    print(i.group()) # 12345678 87654321

# search 匹配第一个结果, 返回一个re.Match对象, group()获取匹配结果
res = re.search(r"\d+", "你好啊, 你手机号是多少?, 是12345678啊, 我手机是87654321啊")
print(res.group()) # 12345678

# match 从开头匹配, 返回一个re.Match对象, group()获取匹配结果
res = re.match(r"\d+", "你好啊, 你手机号是多少?, 是12345678啊, 我手机是87654321啊")
print(res.group()) # 12345678

div = """
<div class="song">
    <span id="songName">晴天</span>
    <span id="songArtist">周杰伦</span>
    <span id="songAlbum">叶惠美</span>
</div>
"""

res = re.finditer(r"<span id=\"(.*?)\">(.*?)</span>", div)
for i in res:
    print(i.group(1), i.group(2)) # songName 晴天 songArtist 周杰伦 songAlbum 叶惠美

# 贪婪和非贪婪
res = re.findall(r"<span id=\"(.*?)\">(.*?)</span>", div)
print(res) # [('songName', '晴天'), ('songArtist', '周杰伦'), ('songAlbum', '叶惠美')]

### 如何在 XPath 中使用正则表达式进行节点匹配 为了实现更复杂的模式匹配,在某些情况下可以结合 Python 的 `re` 模块与 lxml 库来增强 XPath 查询的能力。然而,标准的 XPath 并不直接支持正则表达式的使用[^2]。 但是可以通过 Python 编程的方式间接达到这一目的。具体来说,可以在获取到初步的结果集之后再利用正则表达式进一步过滤这些结果。下面给出一个具体的例子说明如何操作: #### 示例代码展示 假设有一个 HTML 文件名为 `example.html` ,其中包含多个 `<a>` 标签,并希望从中筛选出 href 属性值符合特定 URL 模式的链接。 ```python from lxml import etree import re # 加载并解析HTML文件 tree = etree.parse('example.html', etree.HTMLParser()) # 定义要查找的目标URL模式 pattern = r'https://www\.example\.[a-z]+' # 使用XPath定位所有的<a>标签下的href属性 links = tree.xpath('//a/@href') # 对于每一个找到的链接应用正则表达式测试其是否符合条件 filtered_links = [link for link in links if re.match(pattern, link)] print(filtered_links) ``` 这段程序首先加载了一个 HTML 文件并通过 XPath 获取到了所有 `<a>` 标签下 `href` 属性的内容列表;接着定义了一条简单的正则表达式规则用于识别目标网址格式;最后遍历这个列表并对每一项执行正则匹配验证,最终得到满足条件的一组链接地址。 值得注意的是,虽然这种方式不是严格意义上的“内置”于 XPath 内部的功能,但在实际开发过程中却非常实用有效。对于那些需要更加灵活的数据抓取需求而言,这种方法提供了极大的便利性和灵活性[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值