])", perl -6ren">
gpt4 book ai didi

r - 在 R 中的数学比较符号处拆分字符向量

转载 作者:行者123 更新时间:2023-12-03 21:43:50 24 4
gpt4 key购买 nike

我想用数学比较来分割表达式,例如

unlist(strsplit("var<3", "(?=[=<>])", perl = TRUE))
unlist(strsplit("var==5", "(?=[=<>])", perl = TRUE))
unlist(strsplit("var>2", "(?=[=<>])", perl = TRUE))

结果是:
[1] "var" "<"   "3"  
[1] "var" "=" "=" "5"
[1] "var" ">" "2"

对于上面的第二个例子,我想得到 [1] "var" "==" "5" ,所以两个 =应该作为单个元素返回。我需要如何更改我的正则表达式来实现这一点? (我已经尝试过“==”的分组和量词,但没有任何效果 - 正则表达式不是我的 friend ......)

最佳答案

您可以使用 PCRE 正则表达式来匹配您需要的子字符串:

==|[<>]|(?:(?!==)[^<>])+

也支持 != ,修改为
[!=]=|[<>]|(?:(?![=!]=)[^<>])+

regex demo .

详情 :
  • == - 2 =标志
  • | - 或
  • [<>] - 一个 <>
  • | - 或
  • (?:(?!==)[^<>])+ - 除 < 之外的 1 个或多个字符和 > ( [^<>] ) 不启动 == char 序列(一种缓和的贪婪 token )。

  • 注意 :这很容易通过添加更多的替代品和调整缓和的贪婪 token 来扩展。

    R test :
    > text <- "Text1==text2<text3><More here"
    > res <- regmatches(text, gregexpr("==|[<>]|(?:(?!==)[^<>])+", text, perl=TRUE))
    > res
    [[1]]
    [1] "Text1" "==" "text2" "<" "text3" ">"
    [7] "<" "More here"

    关于r - 在 R 中的数学比较符号处拆分字符向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40759137/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com