我正在尝试从 multimarkdown 纯文本文件的“标签:#tag1 #tag2”行中提取所有#hashtags。(我处于 Python 多行模式。)
我试过使用前瞻:
^(?=Tags:\s.*)#(\w+)\b
和回顾:
#(\w+)\b(?<=Tags:^\s)
普通的香草#(\w+)\b
工作,除了它拿起任何可能出现在文档后面的#hashtag。
任何提示,帮助,指导表示赞赏。
我正在尝试从 multimarkdown 纯文本文件的“标签:#tag1 #tag2”行中提取所有#hashtags。(我处于 Python 多行模式。)
我试过使用前瞻:
^(?=Tags:\s.*)#(\w+)\b
和回顾:
#(\w+)\b(?<=Tags:^\s)
普通的香草#(\w+)\b
工作,除了它拿起任何可能出现在文档后面的#hashtag。
任何提示,帮助,指导表示赞赏。
text = "\n\n#bogus\nTags: #foo #bar\n"
首先,你需要得到这条线:
line = re.findall(r'Tags:.+\n', text)
# line = ['Tags: #foo #bar\n']
最后,您需要从该行获取标签:
tags = re.findall(r'#(\w+)', line[0])
# tags = ['foo', 'bar']
tags = re.findall(r'#\w+', line[0])
# tags = ['#foo', '#bar']
Lookbehind 不起作用,因为您需要提供一个没有固定宽度的图案。
首先获取输入文本中哈希所在的索引,然后使用re.findall获取重复捕获。以下示例打印['#tag1', '#tag2']
text = "Tags: #tag1 #tag2"
matched = re.search(r'^Tags([^#]+)', text)
if matched:
tag_text = text[matched.end():]
hash_tags = re.findall(r'(#(?:[^#\s]+(?:\s*?)))', tag_text)
print hash_tags