Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R regex仅在特定字符串位置选择性地替换字符_Regex_R - Fatal编程技术网

R regex仅在特定字符串位置选择性地替换字符

R regex仅在特定字符串位置选择性地替换字符,regex,r,Regex,R,我在检查A1A1格式的加拿大邮政编码时出错。 常见的打字错误是大写O,而不是位置2、4或6中的零,应该用零替换 我对regex还不太熟悉,这一点让我很困惑。 非常感谢 在gsub函数中使用下面的正则表达式,然后用0 (?<=^.)O|(?<=^.{3})O|(?<=^.{5})O 你可以做 x <- c("A0A0A0", "AOB0C0", "A0BOC0", "A0B0CO", "OOOOOO") gsub("([A-Z])O", "\\10", x) # [1]

我在检查A1A1格式的加拿大邮政编码时出错。 常见的打字错误是大写O,而不是位置2、4或6中的零,应该用零替换

我对regex还不太熟悉,这一点让我很困惑。
非常感谢

在gsub函数中使用下面的正则表达式,然后用
0

(?<=^.)O|(?<=^.{3})O|(?<=^.{5})O
你可以做

x <- c("A0A0A0", "AOB0C0", "A0BOC0", "A0B0CO", "OOOOOO")

gsub("([A-Z])O", "\\10", x)
# [1] "A0A0A0" "A0B0C0" "A0B0C0" "A0B0C0" "O0O0O0"

x如果格式总是这样,可以使用
gsub
替换错误的“O”字符

x <- c('A1A1A1', 'AOAOAO', 'A0B0CO', 'AOBOC0')
gsub('[A-Z]\\KO', '0', x, perl=T)
# [1] "A1A1A1" "A0A0A0" "A0B0C0" "A0B0C0"
x1)使用
gsubfn
我们可以用一个特别简单的正则表达式来实现这一点。请注意,
gsubfn
允许使用公式表示法指定第二个参数中的函数。在这里,它被视为具有指示主体的
x
y
的函数:

library(gsubfn)
gsubfn("(.)(.)", ~ paste0(x, chartr("O", "0", y)), "O0OO1A")
## [1] "O0O01A"
请注意,这适用于位置,并不取决于数字位置为字母之前的位置,因此即使前一个字母被错误地编码为数字(例如,oh为零),它也适用

2)上述方法很容易推广到将偶数位置的ohs转换为零,将奇数位置的ohs转换为零。正则表达式保持不变,只有第二个参数中指定的函数发生更改:

ohzero <- function(x, y) paste0(chartr("0", "O", x), chartr("O", "0", y))
gsubfn("(.)(.)", ohzero, "O00O1A")
## [1] "O0O01A"

请给出一个示例以及预期的输出。我认为这个问题不值得“搁置”,因为指定了格式,只给出了一个示例。答案似乎也解决了这个问题。投票重新开放。不客气。请考虑通过点击旁边的刻度标记来接受你选择的答案。
ohzero <- function(x, y) paste0(chartr("0", "O", x), chartr("O", "0", y))
gsubfn("(.)(.)", ohzero, "O00O1A")
## [1] "O0O01A"
function(x, y) paste0(chartr("01", "OI", x), chartr("OI", "01", y))