用于 hive 的 twitter 数据的正则表达式

Posted

技术标签:

【中文标题】用于 hive 的 twitter 数据的正则表达式【英文标题】:Regex for twitter data for hive 【发布时间】:2019-10-25 05:53:53 【问题描述】:

我有以下 Twitter 数据。

数据分为两部分:

@Username 

还有推文或文字:

RT @username: Stay behind, or take the jump (anything in text or tags and emoji)#@name

@名字 Jjjjjjjjj 德基厄 西迪耶 @kdudiwi .....

RT @username: thehdydvekdgeke

Hshedhdkdjfnfjfkfmfmhdkalshsh+£) #(#(£63+kdjdj????????☺????☺???? 转发@用户名:这唱 kdudhekhh juygg jyttt hyyg

£jdhdieo+3-) £) 7--uuueoehrmwowyeheldyejelwyej

Djdyegeleisyhekelsudhejwksi

这是数据 我想将数据分为两部分,第一部分是用户名,第二部分是推文。

我做的正则表达式是:

^(RT\s[^ ]*)\s([\W]*[\H]*[\w\s@#;:!?+(+-_#)]*)$

第一部分有效,但第二部分无效。

谁能帮帮我?

【问题讨论】:

【参考方案1】:
with your_data as (
 select 'RT @username: Stay behind, or take the jump (anything in text or tags and emoji)' as str
 )

 select regexp_extract(str,'^RT\\s(\\S*)\\s(.*)$',1) as username, 
        regexp_extract(str,'^RT\\s(\\S*)\\s(.*)$',2) as tweet
    from your_data; 

结果:

OK
username        tweet
@username:      Stay behind, or take the jump (anything in text or tags and emoji)
Time taken: 1.092 seconds, Fetched: 1 row(s)

如果您不想在用户名中使用“:”,请使用 '^RT\\s(\\S*):\\s(.*)$'

如果: 是可选的,则为'^RT\\s(\\S*):?\\s(.*)$'

with your_data as (
 select 'RT @username Stay behind, or take the jump (anything in text or tags and emoji)' as str
 )

 select regexp_extract(str,'^RT\\s(\\S*):?\\s(.*)$',1) as username, 
        regexp_extract(str,'^RT\\s(\\S*):?\\s(.*)$',2) as tweet
    from your_data;

结果:

OK
username        tweet
@username       Stay behind, or take the jump (anything in text or tags and emoji)
Time taken: 28.587 seconds, Fetched: 1 row(s)

【讨论】:

我在这个文件上有一个数据文件有很多行我写了模式数据实际上在推文部分有很多行很多不同语言的空格也 @Ajazsheikh 目前还不清楚问题出在哪里。您能否提供清晰的示例和问题陈述 RT @username: hi wassup https//wuussksksihsii #wensdayhajsh ??? vvvvvv bbhjj 这个模式数据文件我有这个? 我分为两部分 [第一部分用户名] [第二文本] 所以我需要在 RT 之前启动正则表达式形式 RT 用户名结束

以上是关于用于 hive 的 twitter 数据的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

hive正则表达式

使用正则表达式从 Twitter 数据中提取用户名

Hive 正则表达式

大数据组件系列之-hive正则表达式

大数据之Hive:正则表达式

Twitter用户名的正则表达式