3

我正在尝试从 multimarkdown 纯文本文件的“标签:#tag1 #tag2”行中提取所有#hashtags。(我处于 Python 多行模式。)

我试过使用前瞻:

^(?=Tags:\s.*)#(\w+)\b

和回顾:

#(\w+)\b(?<=Tags:^\s)

普通的香草#(\w+)\b工作,除了它拿起任何可能出现在文档后面的#hashtag。

任何提示,帮助,指导表示赞赏。

4

2 回答 2

1
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 不起作用,因为您需要提供一个没有固定宽度的图案。

于 2013-12-30T19:00:18.457 回答
1

首先获取输入文本中哈希所在的索引,然后使用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
于 2013-12-30T21:36:06.287 回答