如何使用正则表达式从指定HTML字符串中提取时间信息
用正则捕获目标日期时间的正确方法
先说说你原来写的正则为啥不行:
- 你加的
*是修饰<br/>里的/,意思是匹配0个或多个/,不是匹配<br/>和</td>之间的内容 - 没设置捕获组来提取你要的日期时间
- 完全没匹配中间的日期内容,自然抓不到目标
直接能用的解决方案
用下面的代码就能精准捕获你要的字符串:
import re target_html = '<td>pending since<br/>Thu 15 Sep 2022 11:43:49 PM UTC </td>' # 非贪婪匹配捕获中间内容,再用strip去前后空格 pattern = re.compile(r'<td>pending since<br/>(.*?)</td>') match_result = pattern.search(target_html) if match_result: datetime_content = match_result.group(1).strip() print(datetime_content) # 输出就是你要的 Thu 15 Sep 2022 11:43:49 PM UTC
正则细节说明
(.*?):这是个非贪婪捕获组,专门抓<br/>到</td>之间的所有内容,加?是防止它过度匹配(比如如果有多个</td>的话不会抓到后面的)strip():因为原字符串里日期后面跟了个空格才到</td>,用这个方法可以把多余的空格去掉
如果想更严谨,避免误抓其他不符合格式的内容,可以用更精准的正则,专门匹配这个日期时间格式:
pattern = re.compile(r'<td>pending since<br/>(\w{3} \d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2} [AP]M UTC)</td>')
这个正则严格对应“星期 日 月 年 时分秒 上/下午 UTC”的格式,只有完全符合的内容才会被捕获。
内容的提问来源于stack exchange,提问作者bezzoon
相关产品推荐
相关产品推荐

