python 正在表达式获取<li>共 <span class="color">6,753</span> 条记录</li>中的6,753
时间: 2023-11-16 11:34:53 浏览: 90
同样可以使用正则表达式来提取这个字符串中的数字`6,753`。具体来说,可以先匹配`<li>`标签和`</li>`标签之间的内容,然后再从中提取数字部分。示例如下:
```python
import re
s = '<li>共 <span class="color">6,753</span> 条记录</li>'
match = re.search(r'<li>.*?<span.*?>([\d,]+)</span>.*?</li>', s)
if match:
num_str = match.group(1)
num = int(num_str.replace(',', ''))
print(num) # 输出6,753
else:
print('未找到匹配的字符串')
```
解释一下正则表达式的含义:
- `<li>`:匹配`<li>`标签;
- `.*?`:匹配任意字符,非贪婪模式,即尽可能少地匹配;
- `<span.*?>`:匹配`<span>`标签,其中`.*?`表示匹配`<span>`标签中的任意属性;
- `([\d,]+)`:匹配数字和逗号,其中`[\d,]`表示数字和逗号的字符集,`+`表示匹配一个或多个字符,并将其保存在分组中;
- `</span>`:匹配`</span>`标签;
- `.*?`:同上;
- `</li>`:匹配`</li>`标签。
相关问题
python 正在表达式获取<li>共 <span class="color">6,753</span> 条记录</li>中的6
可以使用正则表达式来提取这个字符串中的数字6。具体来说,可以先匹配`<li>`标签和`</li>`标签之间的内容,然后再从中提取数字部分。示例如下:
```python
import re
s = '<li>共 <span class="color">6,753</span> 条记录</li>'
match = re.search(r'<li>.*?([\d,]+).*?</li>', s)
if match:
num_str = match.group(1)
num = int(num_str.replace(',', ''))
print(num) # 输出6,753对应的数字6,753
else:
print('未找到匹配的字符串')
```
从下面一段HTML语句中提取出所有赛题和发布时间 <li> <a href="/plus/view.php?aid=356">航班座位自动分配系统</a> <span>2019-03-27</span> <div class="clear"></div> </li> <li> <a href="/plus/view.php?aid=346">车牌识别软件的设计与开发</a> <span>2019-03-05</span> <div class="clear"></div> </li>
好的,我可以使用 Python 中的 re 模块来实现这个功能。下面是代码示例:
```python
import re
html = '<li> <a href="/plus/view.php?aid=356">航班座位自动分配系统</a> <span>2019-03-27</span> <div class="clear"></div> </li> <li> <a href="/plus/view.php?aid=346">车牌识别软件的设计与开发</a> <span>2019-03-05</span> <div class="clear"></div> </li>'
pattern = r'<li>\s*<a\s+href="[^"]*"\s*>\s*([^<]*)\s*</a>\s*<span>\s*([^<]*)\s*</span>\s*<div\s+class="clear"></div>\s*</li>'
matches = re.findall(pattern, html)
if matches:
for match in matches:
print("赛题:", match[0])
print("发布时间:", match[1])
print()
else:
print("未能匹配到赛题和发布时间信息")
```
输出结果为:
```
赛题: 航班座位自动分配系统
发布时间: 2019-03-27
赛题: 车牌识别软件的设计与开发
发布时间: 2019-03-05
```
解释一下代码:首先定义了一个字符串 `html`,里面包含了一些 HTML 代码,其中我们要提取出所有赛题和发布时间。然后使用正则表达式 `r'<li>\s*<a\s+href="[^"]*"\s*>\s*([^<]*)\s*</a>\s*<span>\s*([^<]*)\s*</span>\s*<div\s+class="clear"></div>\s*</li>'` 定义了一个模式,意思是匹配以 "<li>" 开头,后面跟着一些空白字符,然后是一个 "<a>" 标签,接着是一些空白字符,然后是赛题名称,再然后是一些空白字符,然后是 "</a>" 标签,接着是一些空白字符,然后是一个 "<span>" 标签,接着是一些空白字符,然后是发布时间,再然后是一些空白字符,然后是 "</span>" 标签,接着是一个 "<div>" 标签和一些空白字符,最后是 "</li>" 标签。使用 `re.findall` 函数在 `html` 中搜索这个模式,返回所有匹配项的元组列表。如果找到了匹配项,则 `matches` 对象不为空;否则,输出"未能匹配到赛题和发布时间信息"。最后,遍历 `matches` 列表,使用索引操作获取每个元组的第一个和第二个元素,也就是赛题名称和发布时间,分别输出它们的值。
阅读全文