从任意长度的字符串中提取子字符串

时间:2013-04-29 18:53:14

标签: excel excel-2007

我的头发超过30,000 tweets。我有一列具有实际tweet。我希望通过本专栏完成两件事。

首先是一段样本数据:

RT @Just_Sports: Cool page for fans of early pro #baseball. https://t.co/QCMYFQNSq8 #mlb #vintage #Chicago #Detroit #Boston #Brooklyn #Phil…
@brettjuliano you already know #unity #newengland #hiphop #boston #watertown  #network

我有一个列使用以下公式来查看消息是否以RT开头,意味着re-tweet。它返回1表示是,0表示否。

我想要完成的是在两列中创建一个公式。如果RT列的值为1,则会获取用户名;如果RT列的值为0,则会在第二列中获取用户名。由于用户名具有任意长度,因此我不确定如何进行此操作。

实施例

RT @Just_Sports:     |     1     |     @Just_Sports     |     0
@brettjuliano        |     0     |                      |     @brettjuliano

1 个答案:

答案 0 :(得分:1)

查看Excel的FIND函数。您可以使用它来标识@的位置,然后使用指定的分隔符匹配用户名的结尾:

=MID(A1, FIND("@",A1), FIND(":",A1,FIND("@",A1)) - FIND("@",A1))

A1是包含推文的单元格,而":"是您的分隔符。


您可以使用相同的功能检查是否存在"RT"标识符。

=FIND("RT",A1)>0

如果找到TRUE,则返回"RT"。您可能需要考虑搜索" RT "(空格)或其他一些变体,因为在推文中没有使用此标准的标准:

=OR(FIND("RT",A1)>0,FIND(" RT",A1)>0,FIND("RT ",A1)>0, FIND(" RT ",A1)>0)

但要注意误报:ARTSTARTARTOO等......

此外,您的"RT"可能是较低/较高/混合大小写,在这种情况下,您需要规范化该搜索:

=OR(FIND("RT",UPPER(A1))>0,FIND(" RT",UPPER(A1))>0,FIND("RT ",UPPER(A1))>0, FIND(" RT ",UPPER(A1))>0)

我的OR支票与您说已经拥有的0/1支票不同,因此您可以根据需要添加IF以转换为0/1

=IF(OR(FIND("RT",A1)>0,FIND(" RT",A1)>0,FIND("RT ",A1)>0, FIND(" RT ",A1)>0),1,0)

一旦您知道RT检查正确,并且您的第二列填写正确,您可以添加到我原来的公式:

第二栏 1 的案例:

=IF(B1=1,MID(A1, FIND("@",A1), FIND(":",A1,FIND("@",A1)) - FIND("@",A1)),"")

第二栏 0 的情况:

=IF(B1=0,MID(A1, FIND("@",A1), FIND(":",A1,FIND("@",A1)) - FIND("@",A1)),"")