re匹配<body></body>之间的内容
时间: 2023-07-09 14:52:43 浏览: 60
你可以使用正则表达式来匹配`<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。
相关问题
Python如何找出以”<p>“和”</p>“之间的字符
可以使用正则表达式来匹配以”<p>“和”</p>“之间的字符。
示例代码:
```python
import re
html = '<html><body><p>Hello, World!</p></body></html>'
pattern = re.compile('<p>(.*?)</p>')
match = pattern.search(html)
if match:
text_between_p_tags = match.group(1)
print(text_between_p_tags)
else:
print('No match found.')
```
输出结果:
```
Hello, World!
```
解释:
- 使用正则表达式模式 `<p>(.*?)</p>`,其中 `.*?` 表示匹配任意字符,非贪婪模式。
- 使用 `re.search()` 函数在 `html` 字符串中查找与模式匹配的第一个子字符串。
- 如果匹配成功,则使用 `group(1)` 方法返回第一个捕获组中的匹配文本,即以 `<p>` 和 `</p>` 之间的文本。
- 如果没有找到匹配项,则输出 “No match found.”。
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)
```
这样就可以提取出所有的数字了。