gpt4 book ai didi

regex - 如何用正则表达式填充两个字符之间的间隙

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

我有一个如下所示的数据集。我想用 1 替换两个 1 之间的所有点,如所需的结果所示。我可以用 regex 做这个吗?在基地 R ?

我试过:

regexpr("^1\\.1$", my.data$my.string, perl = TRUE)

这是 C# 中的解决方案

Characters between two exact characters

谢谢你的任何建议。
my.data <- read.table(text='
my.string state
................1...............1. A
......1..........................1 A
.............1.....2.............. B
......1.................1...2..... B
....1....2........................ B
1...2............................. C
..........1....................1.. C
.1............................1... C
.................1...........1.... C
........1....2.................... C
......1........................1.. C
....1....1...2.................... D
......1....................1...... D
.................1...2............ D
', header = TRUE, na.strings = 'NA', stringsAsFactors = FALSE)

desired.result <- read.table(text='
my.string state
................11111111111111111. A
......1111111111111111111111111111 A
.............1.....2.............. B
......1111111111111111111...2..... B
....1....2........................ B
1...2............................. C
..........1111111111111111111111.. C
.111111111111111111111111111111... C
.................1111111111111.... C
........1....2.................... C
......11111111111111111111111111.. C
....111111...2.................... D
......1111111111111111111111...... D
.................1...2............ D
', header = TRUE, na.strings = 'NA', stringsAsFactors = FALSE)

最佳答案

以下是使用 gsub 的选项与 \G特征和环视断言。

> gsub('(?:1|\\G(?<!^))\\K\\.(?=\\.*1)', '1', my.data$my.string, perl = TRUE)
# [1] "................11111111111111111." "......1111111111111111111111111111"
# [3] ".............1.....2.............." "......1111111111111111111...2....."
# [5] "....1....2........................" "1...2............................."
# [7] "..........1111111111111111111111.." ".111111111111111111111111111111..."
# [9] ".................1111111111111...." "........1....2...................."
# [11] "......11111111111111111111111111.." "....111111...2...................."
# [13] "......1111111111111111111111......" ".................1...2............"
\G特征是可以在两个位置之一匹配的 anchor ;字符串位置的开始位置或最后一次匹配结束时的位置。由于您似乎想避免字符串位置开头的点,我们使用环视断言 \G(?<!^)排除字符串的开头。
\K转义序列会重置报告匹配的起点,并且不再包含任何先前使用的字符。

您可以找到解释正则表达式 here 的整体分割。 .

关于regex - 如何用正则表达式填充两个字符之间的间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27430608/

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