正则表达式在括号之间挑选一些文本

标签 regex r

这个问题在这里已经有了答案:




8年前关闭。




Possible Duplicate:
Extract info inside all parenthesis in R (regex)



我有一个字符串

df
Peoplesoft(id-1290)

例如,我喜欢捕捉括号之间的字符。我喜欢从上面的例子中得到 id-1290。

我用过这个:
x <- regexpr("\\((.*)\\)", df) 

这给了我这样的数字
[1] 10

有没有一种简单的方法可以在 R 中使用正则表达式在括号之间抓取文本?

最佳答案

我更喜欢使用 gsub()为了这:

gsub(".*\\((.*)\\).*", "\\1", df)
[1] "id-1290"

正则表达式的工作方式如下:
  • 在括号内查找文本 - 不是您真正的括号,而是我额外的一组括号,即 (.*)
  • 将此作为反向引用返回,\\1

  • 换句话说,用反向引用替换字符串中的所有文本

    如果您想使用 regexp而不是 gsub ,然后这样做:
    x <- regexpr("\\((.*)\\)", df)
    x
    
    [1] 11
    attr(,"match.length")
    [1] 9
    attr(,"useBytes")
    [1] TRUE
    

    这将返回值 11,即找到的表达式的起始位置。并注意属性 match.length表示匹配了多少个字符。

    您可以使用 attr 提取此信息:
    attr(x, "match.length")
    [1] 9
    

    然后使用 substring提取字符:
    substring(df, x+1, x+attr(x, "match.length")-2)
    [1] "id-1290"
    

    关于正则表达式在括号之间挑选一些文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13498843/

    相关文章:

    regex - 通过 powershell 提取并更新 HTML 字符串中的 URL

    javascript - 为什么 'ABC' .replace ('B' , '$` ') 给出 AAC

    javascript - jQuery 函数用逗号和小数格式化数字

    r - 使用 data.table set() 将所有列从整数转换为数字

    r - 使用索引来引用 dplyr 中 summarise() 中的列 - R

    python - 正则表达式:搜索文件中不同的所有表达式

    新 .NET 4.5 文本框模式的 ASP.NET 验证程序问题

    r - 为什么这段代码要双重转置一个向量——这是一个空操作吗?

    r - 为 data.table 的列设置多个不同的属性

    r - 如何不从 R 中的数据中选择观察结果