【问题标题】:Extract word infront of certain character RegEx Rstudio [duplicate]提取某些字符RegEx Rstudio前面的单词[重复]
【发布时间】:2020-04-12 19:34:41
【问题描述】:

我有这个词,"sam buy expensive toys as 125898652"。 我想提取“as”后面的单词,即“125898652”。

我正在使用

(?<=as\s)+[^\s]+

我已经在https://regex101.com/r/NaWAl1/1 上试过了,效果很好。 当我在 R 上执行它时,它返回错误为

Error: '\s' is an unrecognized escape in character string starting ""(?<='as'\s"

所以我修改为

(?<='CR'\s)+[^\s]+

它返回不同的错误:

Error in stri_extract_first_regex(string, pattern, opts_regex = opts(pattern)) : 
  Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX)

有人可以向我解释一下为什么 R 中的正则表达式不同以及如何使它起作用。非常感谢

【问题讨论】:

  • stringi::stri_extract_first_regex("sam buy expensive toys as 125898652","(?&lt;=as\\s)[^\\s]+") 非常适合您的情况。不要量化环视,它们是零宽度断言。并在字符串文字中使用双反斜杠来定义文字反斜杠。
  • 我也为那里的每个双黑斜杠使用了双反斜杠,但它仍然不起作用

标签: r regex string extraction


【解决方案1】:

使用sub

sub(".*as\\s(\\w+).*", "\\1", "sam buy expensive toys as 125898652")
#[1] "125898652"

或向后看正则表达式

stringr::str_extract("sam buy expensive toys as 125898652", "(?<=as\\s)\\w+")
#[1] "125898652"

对于其中包含, 并且可能有小数位的单词,我们可以做到

x <- "sam buy expensive toys as 128984,45697.00"
sub(".*as\\s(\\d+\\.?\\d+).*", "\\1",gsub(',', '', x))
#[1] "12898445697.00"

【讨论】:

  • 第一个非常好用,但它没有返回 .或者,
  • @yuliansen 可以分享一个例子吗?
  • sam 购买昂贵的玩具为 128984,45697.00 它只返回 128984。非常感谢您的回复
  • 这行得通吗? sub(".*as\\s(\\d+\\.?\\d+).*", "\\1",gsub(',', '', x)) 其中x 是您的字符串。
  • 我不知道该如何感谢你,但你真的帮助了我。稍后我将深入研究 sub 和 gsub。非常感谢
【解决方案2】:

使用base R,给定字符串s &lt;- "sam buy expensive toys as 125898652",您可以使用gsub()strsplit()

> gsub(".*?as\\s","",s)
[1] "125898652

> unlist(strsplit(s,split = "(?<=as\\s)",perl = T))[2]
[1] "125898652"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多