Python 获取两个不同标记之间的所有字符串

Python 获取两个不同标记之间的所有字符串,python,regex,scrape,bs4,Python,Regex,Scrape,Bs4,我正试着把我和别人的对话记录在一起。我希望能够通过名字、时间和文字来打破它。因为我正在提取的对话不是一个漂亮整洁的CSV文件,所以我需要从源代码中提取。我得到如下代码。有没有办法将和之间的所有字符串拉到一起,这样我就可以将每个聊天信息与相应的发件人和发送时间放在一起?谢谢 <div class="message"><div class="message_header"><span class="user">First Lastname</span>

我正试着把我和别人的对话记录在一起。我希望能够通过名字、时间和文字来打破它。因为我正在提取的对话不是一个漂亮整洁的CSV文件,所以我需要从源代码中提取。我得到如下代码。有没有办法将

之间的所有字符串拉到一起,这样我就可以将每个聊天信息与相应的发件人和发送时间放在一起?谢谢

<div class="message"><div class="message_header"><span class="user">First Lastname</span><span class="meta">Tuesday, January 1, 2000 at 5:00pm EST</span></div></div><p>text here</p> 
First lastname美国东部时间2000年1月1日星期二下午5:00text此处


您可以通过使用正则表达式来实现这一点。这是我想到的。注意:Regex已经过测试,但是python代码还不完整。但是你应该能弄明白我在做什么。如果您需要更多关于正则表达式的解释或实现方法,请告诉我。我会调整我的答案

import re

#Put this in a loop to get all files   
    line = #get line from file
    m = re.match(r"<div class=\"message\">.*<span class=\"user\">(.*)<\/span><span class=\"meta\">(.*)<\/span>.*<p>(.*)<\/p>", line)
    name = m.group(1)       # The name
    time = m.group(2)       # Time
    message = m.group(3)    # Message
重新导入
#将其放入循环以获取所有文件
行=#从文件中获取行
m=re.match(r.*(.*)(.*)。*(.*),第行)
name=m.group(1)#名称
时间=m组(2)#时间
message=m.group(3)#message

能够用BeautifulSoup 4解决这个问题。幸运的是,用户、时间和消息的长度是相同的。我将每个用户、时间和消息分为他们自己的列表。然后使用for循环遍历每个列表,将每个用户、时间和消息的[i]匹配到一个列表中,然后附加到另一个列表中。现在移植到CSV应该是小菜一碟了

    texts = []
    times = []
    users = []

    for text in soup.find_all('p'):
        text = text.string
        texts.append(text)
    for time in soup.find_all('span', class_='meta'):
        time = time.string
        times.append(time)
    for user in soup.find_all('span', class_='user'):
        user = user.string
        users.append(user)
conversations = []

for i in range(0,len(users)):
    x = users[i]
    y = times[i]
    z = texts[i]
    chat = [x , y, z]
    conversations.append(chat)
print(conversations)

使用beautifulsoup对结构化文档进行操作,而不是尝试编写正则表达式:您想从中提取什么?消息头、时间和名称?我想拉class=“user”、class=“meta”以及和之间的任何内容。段落标记之间可能没有文本…每条消息是否在单独的行上?