gpt4 book ai didi

regex - R - 按 "\n"或三个空格分割,当有三个空格时至少保留一个空格

转载 作者:行者123 更新时间:2023-12-04 11:35:49 25 4
gpt4 key购买 nike

我希望我能解释清楚,这样对你来说很容易。我需要这个,因为字符串中的缺失信息被标记为三个空格,并且令人惊讶的是不会执行 \n为下一条信息。

想象一下我有一个像这样的字符串:

string <- "abc
def
ghi jkl"

我希望正则表达式的输出(可能带有更高级的函数 strsplit())是:
[[1]]
[1] "abc" "" "def" "ghi" "" "jkl"

当它找到 \n 时就会 split 并在找到三个空格时拆分并插入一个空格。我需要将丢失的信息标记为另一个值。如果不是,那会破坏我的脚本,认为下一个信息是,例如,与 def 连接的三个空格字符串。

谢谢

最佳答案

这是两个都使用 strsplit 的解决方案但它们的拆分方式不同:

1) 在换行符上拆分 删除所有给 s1 的换行符然后在每三个字符后添加一个换行符,给出 s2 .在换行符上拆分 s2 并用空字符串替换每次出现的三个连续空格。

Split <- function(string) {
s1 <- gsub("\n", "", string)
s2 <- gsub("(.{3})", "\\1\n", s1)
spl <- strsplit(s2, "\n")
lapply(spl, function(s) replace(s, s == " ", ""))
}

# test
string <- "abc\n def\nghi jkl"
Split(string)
## [[1]]
## [1] "abc" "" "def" "ghi" "" "jkl"

2) 在零宽度 3 个字符正则表达式上拆分 删除换行符并使用指定的正则表达式拆分。最后用空字符串替换每个连续的三个空格。
Split2 <- function(string) {
s1 <- gsub("\n", "", string)
spl <- strsplit(s1, "(?<=...)", perl = TRUE)
lapply(spl, function(s) replace(s, s == " ", ""))
}

# test
string <- "abc\n def\nghi jkl"
Split2(string)
## [[1]]
## [1] "abc" "" "def" "ghi" "" "jkl"

注:1 .请注意,针对此问题提供的其他答案不适用于以下输入字符串(连续有两个空字段),但此处的答案确实可以正确识别 abc 之后连续的两个空的 3 个字符字段。 field :
string2 <- "abc\n      def\nghi   jkl" # 6 spaces before d, 3 spaces before j

Split(string2)
## [[1]]
## [1] "abc" "" "" "def" "ghi" "" "jkl"

Split2(string2)
## [[1]]
## [1] "abc" "" "" "def" "ghi" "" "jkl"

注 2:上面的两个解决方案也可以使用 magrittr 管道很好地表达:
library(magrittr)
string %>%
gsub(pattern = "\n", replacement = "") %>%
gsub(pattern = "(.{3})", replacement = "\\1\n") %>%
strsplit("\n") %>%
lapply(function(s) replace(s, s == " ", ""))

## [[1]]
## [1] "abc" "" "def" "ghi" "" "jkl"


library(magrittr)
string %>%
gsub(pattern = "\n", replacement = "") %>%
strsplit("(?<=...)", perl = TRUE) %>%
lapply(function(s) replace(s, s == " ", ""))

## [[1]]
## [1] "abc" "" "def" "ghi" "" "jkl"

关于regex - R - 按 "\n"或三个空格分割,当有三个空格时至少保留一个空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34436838/

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