我有一个像这样的字符串s = "Hello this is Helloworld #helloworld #hiworld #nihaoworld "
这个想法是捕获所有的标签,但是标签需要有一个边界。例如如果不会捕获"Hello this is helloworld#helloworld"
之类的内容。
我想生成以下结果["#helloworld","#hiworld","nihaoworld"]
我有以下python代码
import re
print re.findall('(?:^|\s+)(#[a-z]{1,})(?:\s+|$)', s)
我得到的结果是["#helloworld","#nihaoworld"]
,缺少中间词
答案 0 :(得分:1)
我认为你真的不需要正则表达式,你可以使用:
s.strip().split()
但是,如果您确实想要使用正则表达式,则可以使用(?:^|\s)(#\w+)
:
>>> import re
>>> s = " #helloworld #hiworld #nihaoworld "
>>> re.findall(r'(?:^|\s)(#\w+)', s)
['#helloworld', '#hiworld', '#nihaoworld']
<强>解释强>
(?:^|\s)
^
^
在字符串\s
\s
匹配任何空格字符(等于[\r\n\t\f\v ]
)(#\w+)
#
字面匹配字符#
(区分大小写)\w+
匹配任何字词(等于[a-zA-Z0-9_]
)+
量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)