【问题标题】:Regular expression for numbers in RR中数字的正则表达式
【发布时间】:2015-09-09 08:04:21
【问题描述】:

我需要编写一个正则表达式来解析以下数据:

[1] "Chicken (30.67%);Duck (17.3%);Wild duck (16%);Pigeon (4%);
[2] "Chicken (30.67%);Duck (17.3%);Wild duck (16%);Blue-winged teal (4%)

这就是我所拥有的:

"(\\w[\\w\\s]+)\\(([0-9]+\\.[0-9][0-9]?)%\\);?"

它有效,但我有几个问题:

  • 无法识别 10+%(例如 30.67%)
  • 当缺少小数点 (16%) 或少 1 个小数点 (17.3%) 时无法识别

谁能帮忙?

【问题讨论】:

  • 你的预期输出是什么?
  • 试试(\\w+(?:\\s+\\w+)*)\\s*\\(([0-9]+(\\.[0-9]+)?)%\)。看看the demo

标签: regex r decimal points


【解决方案1】:

只需使用我建议的正则表达式:

(\\w+(?:\\s+\\w+)*)\\s*\\(([0-9]+(?:\\.[0-9]+)?)%\\);?

demo

还有 R 代码示例:

library(stringr)
str_extract_all(str, "(\\w+(?:\\s+\\w+)*)\\s*\\(([0-9]+(?:\\.[0-9]+)?)%\\);?")[[1]]

【讨论】:

  • 如果它适合您,请告诉我,否则您需要更多说明。
【解决方案2】:

这应该会有所帮助:

   library(stringr)
    str_extract_all(text, pattern = "[0-9]{1,2}(\\.[0-9]{1,2})?%")

正则表达式的解释:

[0-9]{1,2} there are one or two digits between 0-9
  (        start Group
    \\.    a dot (have to escape it with double backslash, otherwise special character
    [0-9]{1,2} there are one or two digits between 0-9
  )?       end group, group may exists, but must not
 %         percent dign 

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
  • 这个解释有帮助吗?
  • 不客气!也许您可以接受答案正确而不是关闭此问题?谢谢
  • 不是我的问题,这个答案在 LQ 后审查队列中,所以我在任何纯代码答案上使用了我的“罐头文本”。投赞成票,但要由请求者接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多