我的文字:
27/07/18, 12:02 PM - user_a: https://www.youtube.com/
Watch this
27/07/18, 12:15 PM - user_b: <Media omitted>
27/07/18, 12:52 PM - user_b: Read this fully
some text
some text
.
some text
27/07/18, 12:56 PM - user_c: text ..
在这里,我想提取用户发送的消息。我尝试了两个正则表达式。但我没有得到我想要的答案
第一个正则表达式:
re.findall(r''+user_name+ ':(.*)', data)
在这里,我无法提取文本多行
第二个正则表达式:
re.findall(r''+ user_name + ':[^(:)]*', data)
在这里,我无法提取具有超链接的全文。即,我只能获得“https”。它将符号“:”视为端点。
我该如何处理?任何形式的建议都非常棒,乐于助人
您可以使用以下模式:
user_b: (.*?)(?=^[0-9]{2}/[0-9]{2}/[0-9]{2})
正则表达式演示here。
请注意re.MULTILINE
和re.DOTALL
的用法。需要第一个标志来匹配多行文本中的行模式的开头,而需要re.DOTALL
来使.
也匹配换行符。
在Python中:
import re
data = '''
27/07/18, 12:02 PM - user_a: https://www.youtube.com/
Watch this
27/07/18, 12:15 PM - user_b: <Media omitted>
27/07/18, 12:52 PM - user_b: Read this fully
some text
some text
.
some text
27/07/18, 12:56 PM - user_c: text ..
'''
usern = 'user_b'
pattern = re.compile(r""+usern+r": (.*?)(?=^[0-9]{2}/[0-9]{2}/[0-9]{2})",re.DOTALL|re.MULTILINE)
print(re.findall(pattern,data))
打印:
['<Media omitted>\n', 'Read this fully\nsome text\nsome text\n.\nsome text\n']
我相信你的正则表达式应该是:user_b: (.*?)^[0-9]
。找到用户后,匹配行的其余部分,直到找到一行作为行的第一个字符(下一个条目)。确保打开多行。