我目前正在尝试从始终采用相同格式的字符串中提取数据(从不支持API的社交网站中抓取)
字符串示例
53.2k Followers, 11 Following, 1,396 Posts
5m Followers, 83 Following, 1.1m Posts
Run Code Online (Sandbox Code Playgroud)
我当前正在使用以下正则表达式:“ [0-9] {1,5}([,。] [0-9] {1,4})?” 获取数字部分,保留逗号和点分隔符。
它产生如下结果
53.2, 11, 1,396
5, 83, 1.1
Run Code Online (Sandbox Code Playgroud)
我确实需要一个正则表达式,即使它是一个空格,它也将在数字部分之后捕获字符。即
53.2k, 11 , 1,396
5m, 83 , 1.1m
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏
R代码再现
library(stringr)
string1 <- ("536.2k Followers, 83 Following, 1,396 Posts")
string2 <- ("5m Followers, 83 Following, 1.1m Posts")
info <- str_extract_all(string1,"[0-9]{1,5}([,.][0-9]{1,4})?")
info2 <- str_extract_all(string2,"[0-9]{1,5}([,.][0-9]{1,4})?")
info
info2
Run Code Online (Sandbox Code Playgroud)
我建议使用以下正则表达式模式:
[0-9]{1,3}(?:,[0-9]{3})*(?:\\.[0-9]+)?[A-Za-z]*
Run Code Online (Sandbox Code Playgroud)
该模式会生成您期望的输出。这是一个解释:
[0-9]{1,3} match 1 to 3 initial digits
(?:,[0-9]{3})* followed by zero or more optional thousands groups
(?:\\.[0-9]+)? followed by an optional decimal component
[A-Za-z]* followed by an optional text unit
Run Code Online (Sandbox Code Playgroud)
只要有可能,我倾向于倾向于基本 R 解决方案,这是一个使用gregexpr
and 的解决方案regmatches
:
txt <- "53.2k Followers, 11 Following, 1,396 Posts"
m <- gregexpr("[0-9]{1,3}(?:,[0-9]{3})*(?:\\.[0-9]+)?[A-Za-z]*", txt)
regmatches(txt, m)
[[1]]
[1] "53.2k" "11" "1,396"
Run Code Online (Sandbox Code Playgroud)