我的文字:
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”。它将符号“:”作为端点。
我该如何处理?任何类型的建议都是非常有用的
答案 0 :(得分:1)
我相信您的正则表达式应为:user_b: (.*?)^[0-9]
。找到您的用户后,匹配该行的其余部分,直到找到一个数字作为该行的第一个字符(下一个条目)。确保打开多行。
答案 1 :(得分:1)
您可以使用以下模式:
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']