我有这样的推文文字:
"@user1 @user2 blablabla @user3"
Run Code Online (Sandbox Code Playgroud)
我想使用正则表达式在推文开头过滤用户.这意味着@ user1和@ user2.并不总是有相同数量的用户,可能有一个,两个,三个......
我正在尝试使用re.IGNORECASE:
re.compile(ur'^(@[a-z0-9_]*\s)*')
Run Code Online (Sandbox Code Playgroud)
但是不符合我想要的,我已经尝试了我想出的所有东西,但都失败了.我对Python正则表达式不是很熟悉,但我会用egrep来做这件事:
echo "@user1 @user2 blablabla @user3" | egrep '^(@[[:alnum:]_]*[ ]*)*'
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑
正则表达式是正确的,我只是以错误的方式检查解决方案.
tweet = "@user1 @user2 blablabla @user3"
re.compile(ur'^(@[a-z0-9_]*\s)*').match(tweet).groups()
Run Code Online (Sandbox Code Playgroud)
代替:
re.compile(ur'^(@[a-z0-9_]*\s)*').match(tweet).group(0)
Run Code Online (Sandbox Code Playgroud)
更正式的正则表达式:
re.compile(ur'^(@\w+\s)+').match(tweet).group(0)
Run Code Online (Sandbox Code Playgroud)
没有re,但有itertools:
>>> tw = "@user1 @user2 blablabla @user3"
>>> import itertools
>>> list(itertools.takewhile(lambda x: x.startswith('@'), tw.split()))
['@user1', '@user2']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |