python正则表达式中匹配字符@开头的单词,出错? 400 报错
我要匹配以@开头的单词,在《python标准库》P39中的例子,但是我自己写了一个类似的表达式,结果出错。
#1 twitter = re.compile(r'\b@([\w\d_]+)', re.UNICODE | re.VERBOSE) #2 twitter = re.compile(r'(?<=@)([\w\d_]+)', re.UNICODE | re.VERBOSE) text = u'hello world @this world' match = twitter.search(text) if match: print text[match.start():match.end()] else: print 'no match'其中#1是我写的代码,#2是书上的代码,可以正确搜索出 @this ,但是为什么简单的\b@\w+就不能搜索出来呢?
\b 匹配单词的开始或结束 \b@\w+ 是匹配,asdf@sdf 这样的字符串 他的要求是@的前面要有字符串才可以,前面不能是空格,我说也说得不是太明白,osc在线工具有个正则测试,多试两遍就明白了######回复 @伊藤熊吉 : 对哦,@不是单词字符。哦,谢谢了,刚才还在纠结呢。######回复 @雷朝建 : 注意 @符号不是单词字符######回复 @雷朝建 : “\b”表示所在位置的一侧为单词字符,另一侧为非单词字符、字符串的开始或结束位置 \b@ 就是匹配,@的左边为\w 右侧为字符结束的,放在后面就是 匹配@后面是\w 前面是开始和结束######貌似还是不太明白,因为我\bt\w+也可以匹配以t开头的单词,但是就不能匹配以@开头的单词。不过还是谢谢你,^_^######换种说法吧,\b@ 匹配 sss@ 是可以的 @\b 匹配 @sss 是可以的,但是换一下就不行了,这样说你明白了么...######
text = u'hello world @this world'
>>> c = r"(?<=@)(.+?)(?=\ )"
>>> re.findall(c,text)[u'this']
这个正则专找@后面跟>1个非空格字符的 字符串,比如说 this
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。