正则表达式提取数字和尾随字母或空格

Per*_*ost 7 regex r

我目前正在尝试从始终采用相同格式的字符串中提取数据(从不支持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)

Tim*_*sen 4

我建议使用以下正则表达式模式:

[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 解决方案,这是一个使用gregexprand 的解决方案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)