re匹配<body></body>之间的内容
时间: 2023-07-09 13:52:43 浏览: 103
你可以使用正则表达式来匹配`<body></body>`之间的内容,例如:
```python
import re
html = '<html><head><title>Test</title></head><body><p>Hello World!</p></body></html>'
body_pattern = re.compile('<body>(.*?)</body>', re.S) # re.S表示.匹配包括换行符在内的所有字符
result = re.search(body_pattern, html)
if result:
body_content = result.group(1)
print(body_content)
```
这个例子中,我们首先定义了一个正则表达式`<body>(.*?)</body>`,它表示匹配`<body>`和`</body>`之间的任何字符,`.*?`表示非贪婪匹配,匹配最短的字符串。然后,我们使用`re.search()`方法在字符串中查找匹配的内容,并使用`group(1)`方法获取第一个捕获组的内容,即`<body>`和`</body>`之间的内容。最后,我们打印出匹配的内容。
需要注意的是,使用正则表达式来解析HTML是不够健壮的,因为HTML有许多复杂的结构和特殊情况,例如注释、嵌套标签等等。如果你需要解析HTML,最好使用专门的HTML解析器,例如BeautifulSoup。
相关问题
import retext = """<table class="table table-bordered table-condensed"> <thead> <tr> <th>期号</th> <th colspan="11">开奖号码</th> <th>总和</th> </tr> </thead> <tbody> <tr class="new"> <td>2023058</td> <td>10 17 22 26 30 33 + 11</td> <td>×</td> <td>×</td> <td>×</td> <td>×</td> <td>×</td> <td>×</td> <td>×</td> <td>×</td> <td>×</td> <td>×</td> <td>0</td> </tr> <tr class="new"> <td>2023059</td> <td></td> <td>24</td> <td>10</td> <td>26</td> <td>31</td> <td>12</td> <td>33</td> <td>24</td> <td>08</td> <td>31</td> <td>24</td> <td></td> </tr> <tr> <td colspan="2">正确次数</td> <td>4</td> <td>3</td> <td>7</td> <td>2</td> <td>9</td> <td>3</td> <td>4</td> <td>5</td> <td>3</td> <td>6</td> <td></td> </tr> <tr> <td colspan="2">错误次数</td> <td>16</td> <td>17</td> <td>13</td> <td>18</td> <td>11</td> <td>17</td> <td>16</td> <td>15</td> <td>17</td> <td>14</td> <td></td> </tr> <tr> <td colspan="2">当前连对</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td></td> </tr> <tr> <td colspan="2">当前连错</td> <td>1</td> <td>4</td> <td>2</td> <td>4</td> <td>1</td> <td>7</td> <td>1</td> <td>2</td> <td>13</td> <td>3</td> <td></td> </tr> <tr> <td colspan="2">最大连对</td> <td>2</td> <td>1</td> <td>3</td> <td>1</td> <td>2</td> <td>1</td> <td>2</td> <td>2</td> <td>2</td> <td>2</td> <td></td> </tr> <tr> <td colspan="2">最大连错</td> <td>9</td> <td>7</td> <td>4</td> <td>12</td> <td>3</td> <td>7</td> <td>7</td> <td>4</td> <td>13</td> <td>3</td> <td></td> </tr> </table> </div> </div> </div> <script type="text/javascript" src="https://img.78500.cn/mobile/iscroll.js"></script> <script type="text/javascript"> var wrapper; function loaded() { wrapper = new iScroll("wrapper", { vScrollbar: false, hScrollbar: false, zoom: true, zoomMin: 0.5, zoomMax: 1 }); } document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); document.addEventListener('DOMContentLoaded', loaded, false); </script></body> </html>"""pattern = re.compile(r'<tr class="new">(.*?)</tr>', re.S)matches = pattern.findall(text)for match in matches: print(match) 没有匹配上 且没有匹配数字
可能是因为你的正则表达式中只匹配了包含`class="new"`的`<tr>`标签,而在这个HTML代码片段中只有一个`<tr class="new">`标签。你可以尝试修改正则表达式,匹配所有的`<tr>`标签,例如:
```
pattern = re.compile(r'<tr.*?>(.*?)</tr>', re.S)
```
这样就可以匹配所有的`<tr>`标签了。如果想要匹配数字,可以再使用正则表达式提取出数字部分,例如:
```
matches = pattern.findall(text)
for match in matches:
numbers = re.findall(r'\d+', match)
print(numbers)
```
这样就可以提取出所有的数字了。
1.单选题:假设已导入正则表达式模块 re,已知: s = '<html><head>This is head.</head><body>This is body.</body></html>' 和 pattern = r'<html><head>(.+)</head><body>(.+)</body></html>' 那么表达式 re.findall(pattern, s) 的值为( ) A.[('This is head.', 'This is body.')] B.['This is head.', 'This is body.'] C.('This is head.', 'This is body.') D.['This is head.']
单选题答案:A. [('This is head.', 'This is body.')]
re.findall(pattern, s) 的作用是在字符串 s 中查找所有匹配正则表达式 pattern 的子串,并返回一个列表。在这个例子中,pattern 匹配整个字符串 s,因为字符串 s 恰好是一个符合 pattern 正则表达式的字符串。正则表达式 pattern 包含两个用圆括号括起来的子表达式 (.+),它们分别匹配 head 和 body 标签中的内容。由于在 pattern 中使用了两个子表达式,因此 re.findall(pattern, s) 返回一个包含两个元素的列表。每个元素都是一个元组,包含两个子串,分别是 head 标签和 body 标签中的内容。因此,表达式 re.findall(pattern, s) 的值为 [('This is head.', 'This is body.')]。
阅读全文