我正在寻找一种简单的方法来创建基于SocialBakers数据(复制/粘贴到TextMate中)的Twitter @handles列表。
我试过使用下面的RegEx,它是我在StackOverflow上找到的,但不幸的是,它不是我想要的方式:
^(?!.*@([\w+])).*$虽然上面的表达式删除了所有没有@handle的行,但我希望RegEx删除@handle前后的所有内容以及没有@handles的行。
示例:
1
katyperry KATY PERRY (@katyperry)
Followings 158
Followers 82 085 596
Rating
5
Worst012345678910Best
2
justinbieber Justin Bieber (@justinbieber)
254 399
74 748 878
2
Worst012345678910Best
3
taylorswift13 Taylor Swift (@taylorswift13)
245
70 529 992期望的结果:
@katyperry
@justinbieber
@taylorswift13提前感谢您的帮助!
发布于 2016-02-05 19:41:30
如下所示:
cat file | perl -ne 'while(s/(@[a-z0-9_]+)//gi) { print $1,"\n"}'如果您有多个@handles的行,这也是有效的。
发布于 2016-02-05 19:41:52
Twitter句柄正则表达式是@\w+。因此,要删除所有其他内容,您需要匹配并捕获模式,并使用对此捕获组的反向引用,然后只匹配任何字符:
(@\w+)|.使用DOTALL模式也可以匹配换行符。替换为$1 (或\1,取决于您使用的工具)。
请参阅demo
发布于 2016-02-05 19:59:59
在Caret中测试的海峡REGEX:
@.*[^)]上面将搜索任何给定的和排除右括号。
@.*\b上面的代码在Caret文本编辑器中做同样的事情。
如何使用awk和sed:
还可以获取用户名:
$ awk '/@.*/ {print}' test
katyperry KATY PERRY (@katyperry)
justinbieber Justin Bieber (@justinbieber)
taylorswift13 Taylor Swift (@taylorswift13)只有句柄:
$ awk -F "(" '/@.*/ {print$2}' test | sed 's/)//g'
@katyperry
@justinbieber
@taylorswift13A查看测试文件:
$ cat test
1
katyperry KATY PERRY (@katyperry)
Followings 158
Followers 82 085 596
Rating
5
Worst012345678910Best
2
justinbieber Justin Bieber (@justinbieber)
254 399
74 748 878
2
Worst012345678910Best
3
taylorswift13 Taylor Swift (@taylorswift13)
245
70 529 992Bash版本:
$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.https://stackoverflow.com/questions/35222957
复制相似问题