gpt4 book ai didi

regex - 用多个分隔符拆分字符串,同时在结果中包含运算符

转载 作者:行者123 更新时间:2023-12-04 17:59:55 27 4
gpt4 key购买 nike

如何拆分像Start>=8.5这样的字符串或 Start< 14.5通过比较运算符 - >= , <= , > , < - 保留结果中的运算符?所需的输出将包含三个元素,例如:

output[1]
Start

output[2]
>=
output[3]
8.5

对于第二个字符串:

output[1]
Start

output[2]
<

output[3]
14.5

我试过了sapply(x, function(x) strsplit(x, ">=|<", perl = TRUE)) ,但这会删除分隔符。

最佳答案

您可以使用 strsplit使用以下 PCRE 正则表达式:

strsplit(input, '(?<=[><=])(?=[^><=])|(?<=[^><=])(?=[><=])', perl = TRUE)

参见 IDEONE demothis regex demo .

详细信息:

正则表达式包含 2 个用 OR 分隔的选项 |管道符号。第一部分- (?<=[><=])(?=[^><=]) - 有 2 个零宽度断言匹配已定义字符类 ([><=]) 中的运算符符号与非否定字符类 ([^><=]) 中定义的符号之间的空位置。第二种选择匹配属于运算符类的字符以外的字符与属于运算符类的字符之间的空位置。因此,实际上,我们匹配运算符前后的 2 个位置。

替代方案基于stringr str_match_all :

> library(stringr)
> input <- c("Start>=8.5","Start< 14.5","x == 4","tmp >= 7","ff =11","x<=2")
> output <- str_match_all(input, "([^=<>]*?)\\s*([<>=]+)\\s*(.*)")

参见 regex demo , ([^=<>]*?)\\s*([<>=]+)\\s*(.*)模式有 3 个捕获组,分别捕获运算符之前的部分 ( ([^=<>]*?) )、运算符本身 ( ([<>=]+) ),然后是运算符后面的部分 ( (.*) )。

关于regex - 用多个分隔符拆分字符串,同时在结果中包含运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36750887/

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