如何使用RegEx从文本中提取Twitter @handles?

时间:2016-02-05 11:24:37

标签: regex

我正在寻找一种基于SocialBakers数据创建Twitter @handles列表的简单方法(复制/粘贴到TextMate中)。

我已经尝试使用以下RegEx,我在StackOverflow上找到了它,但不幸的是它不能按照我想要的方式工作:

^(?!.*@([\w+])).*$

虽然上面的表达式删除了没有@handles的所有行,但我希望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

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

这样的事情:

cat file | perl -ne 'while(s/(@[a-z0-9_]+)//gi) { print $1,"\n"}'

如果你的行中包含多个@handles,这也会有用。

答案 1 :(得分:0)

Twitter处理正则表达式为@\w+。因此,要删除其他所有内容,您需要匹配并捕获模式并使用对此捕获组的反向引用,然后匹配任何字符:

(@\w+)|.

使用DOTALL模式也匹配换行符号。替换为$1(或\1,具体取决于您使用的工具。

请参阅demo

答案 2 :(得分:0)

海峡REGEX在Caret中测试:

<div class="container">
  <div class="row">
    <div class="col-md-4 vessel-card">
      <a href="cienfuegos-from-havana.html" class="special-departure">
        <img src="http://placehold.it/350x150">
      </a>
      <h3>Vessel: Panorama</h3>
      <div class="departure-card">
        <p>Havana to Cienfuegos starting at $5,999
          <a href="#" class="btn btn-explore">Explore</p></a>
      </div>
      <div class="departure-card">
        <p>Havana to Cienfuegos starting at $5,999
          <a href="cienfuegos-from-havana.html" class="btn btn-explore">Explore</p></a>
      </div>
    </div>
  </div>
</div>

以上将搜索和任何给定和排除的右括号。

@.*[^)]

上面这里在Caret文本编辑器中做同样的事情。

如何awk和sed这个:

获取用户名:

@.*\b

只是句柄:

$ 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
@taylorswift13

Bash版本:

$ 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 992