匹配可选的“#”似乎无法正常工作

时间:2014-11-05 06:30:08

标签: python regex

我试图从字符串中获取完整的单词或主题标签,似乎我正在应用“可选字符”#39; ?在正则表达式中标记错误。

这是我的代码:

print re.findall(r'(#)?\w*', text)

print re.findall(r'[#]?\w*', text)

因此'这是一句话,谈论这个,#this,#that,#etc'

应该返回'这个'和'#this'

然而,它似乎正在返回一个包含空字符串以及其他随机内容的列表。

正则表达式有什么问题?

编辑:

我试图获取整个垃圾邮件的话,我似乎把自己混淆了......

s = 'spamword'
print re.findall(r'(#)?'+s, text)

我需要匹配整个单词,而不是单词部分......

2 个答案:

答案 0 :(得分:1)

您可以在正则表达式中使用单词边界:

s = 'spamword'
re.findall(r'#?' + s + r'\b', text)

答案 1 :(得分:0)

以上答案真正解释了为什么,这是一段应该有用的代码。

>>>re.findall(r'#?\w+\b')