0

我正在寻找以第一次出现开始@和结束的子字符串。\s必须@在字符串的开头或空格之后。

示例@one bla bla bla @two @three@four #@five

结果@one, @two, @three@four

我最终得到了这个 re:((?<=\s)|(?<=^))@[^\s]+它在 sublime text 2 中运行良好,但在 python 中返回空字符串。

蟒蛇代码

re.findall(r'((?<=^)|(?<=\s))@[^\s]+', '@one bla bla bla @two @three@four #@five')
4

2 回答 2

2

如果您愿意不使用 reg expr 您可以尝试:

>>> s ="@one bla bla bla @two @three@four #@five"
>>> filter(lambda x:x.startswith('@'), s.split())
['@one', '@two', '@three@four']

这实际上应该快得多......

于 2012-12-21T06:53:16.063 回答
0

您的捕获组未捕获您真正要查找的文本:

(?:(?<=^)|(?<=\s))(@[^\s]+)

现在,它起作用了:

>>> re.findall(r'(?:(?<=^)|(?<=\s))(@[^\s]+)', '@one bla bla bla @two @three@four #@five')
['@one', '@two', '@three@four']
于 2012-12-21T06:45:43.747 回答