用于 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 数据的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章