是否可以编写一个正则表达式公式,可以捕获多个单词加上-
#
加上#
,但如果#
位于用空格分隔的几个单词的末尾那么在开始和结束之间捕获整个文本import re
s = """
this is a dummy #text with some #dummy_short-tags
and a #full length long tag# that has closing symbol.
"""
print re.findall(r'#([\w-]+)', s)
# --> ['text', 'dummy_short-tags', 'full']
print re.findall(r'#(.+)?(?<!\s)#', s)
# --> ['full length long tag']
?
我相信我的代码比我的描述更容易理解:
{{1}}
我可以将上面的两个正则表达式合并为一个吗?因此,我可以避免同时捕获“完整”和“全长标记”,我的目标是将捕获的文本视为一种数据类型。
提前致谢!
答案 0 :(得分:3)
使用交替:
re.findall('#([\w\s]+\w(?=#)|[\w-]+)', s)
输出:
['text', 'dummy_short-tags', 'full length long tag']