R 替换字符串中标点符号的第二个实例?
具有多个具有该模式的字符串: A/B/C/D 我只需要将第二个“/”改为其他内容(比如,*) 所以A/B/C/D-->A/B*C/DR 替换字符串中标点符号的第二个实例?,r,regex,R,Regex,具有多个具有该模式的字符串: A/B/C/D 我只需要将第二个“/”改为其他内容(比如,*) 所以A/B/C/D-->A/B*C/D gsub('(^[[:punct:]])([[:punct:]])', "*", string) #Didn't Work gsub('[[:punct:]]{2}', "*", string) #Didn't work 你可以用 sub("([^[:punct:]]*[[:punct:]][^[:punct:]]*)[[:punct:]]", "\\1*",
gsub('(^[[:punct:]])([[:punct:]])', "*", string) #Didn't Work
gsub('[[:punct:]]{2}', "*", string) #Didn't work
你可以用
sub("([^[:punct:]]*[[:punct:]][^[:punct:]]*)[[:punct:]]", "\\1*", string)
见
sub
功能将查找单个(首次)出现的
-第1组(([^[:punct:][]*[^[:punct:][]*)
指替换模式中的此值):0个字符(标点符号除外),一个标点符号,然后再0个字符(标点符号除外)\1
-标点符号[[:punct:]
sub("\\P{P}*\\p{P}\\P{P}*\\K\\p{P}", "*", string, perl=TRUE)
看
但是,要小心。或者将所有\p{p}
替换为[\p{p}\p{S}]
,并将所有\p{p}
替换为您可以使用的[^\p{p}\p{S}]
sub("([^[:punct:]]*[[:punct:]][^[:punct:]]*)[[:punct:]]", "\\1*", string)
见
sub
功能将查找单个(首次)出现的
-第1组(([^[:punct:][]*[^[:punct:][]*)
指替换模式中的此值):0个字符(标点符号除外),一个标点符号,然后再0个字符(标点符号除外)\1
-标点符号[[:punct:]
sub("\\P{P}*\\p{P}\\P{P}*\\K\\p{P}", "*", string, perl=TRUE)
看
但是,要小心。或者将所有
\p{p}
替换为[\p{p}\p{S}]
,将所有\p{p}
替换为[^\p{p}\p{S}]
我们可以尝试使用sub
捕获一个或多个非/
字符,后跟/
字符和非/
字符作为一个组,并在替换中使用捕获组的反向引用(\\1
)和字符*
sub("^([^/]+[/][^/]+)[/]", "\\1*", str1)
#[1] "A/B*C/D"
此外,如果字符串长度固定,每个字母后跟
/
,则可以使用子字符串执行赋值
substring(str1, 4, 4) <- "*"
substring(str1,4,4)我们可以尝试使用sub
来捕获一个或多个非/
的字符,后跟/
和非/
的字符作为一个组,并在替换过程中使用带有*
字符的捕获组的反向引用(\\1
)
sub("^([^/]+[/][^/]+)[/]", "\\1*", str1)
#[1] "A/B*C/D"
此外,如果字符串长度固定,每个字母后跟/
,则可以使用子字符串执行赋值
substring(str1, 4, 4) <- "*"
子字符串(str1,4,4)我们可以使用一个lookback来匹配遵循“单词字符正斜杠单词字符”模式的/
:
当然,在这种情况下,我们也可以使用[^[:punct:]
和[:punct:]]
的组合来实现相同的结果。请注意,以下模式更为普遍:
sub("(?<=^[^[:punct:]][[:punct:]][^[:punct:]])[[:punct:]]", "*", "A/B/C/D", perl = TRUE)
# [1] "A/B*C/D"
sub((?我们可以使用lookback来匹配遵循“单词字符正斜杠单词字符”模式的/
:
当然,在这种情况下,我们也可以结合使用[^[:punct:][]
和[:punct:][]
来获得相同的结果。请注意,以下模式更通用:
sub("(?<=^[^[:punct:]][[:punct:]][^[:punct:]])[[:punct:]]", "*", "A/B/C/D", perl = TRUE)
# [1] "A/B*C/D"
sub(“(?将此添加为答案,因为它是“最干净的”,但Wiktor Stribizew的解决方案也起作用。将此添加为答案,因为它是“最干净的”,但Wiktor Stribizew的解决方案也起作用。“sub”解决方案确实起作用,PCRE解决方案在我的具体情况下不起作用,但我还是对该解决方案表示赞赏。谢谢!sub解决方案Indeed工作得很好,PCRE解决方案在我的情况下不起作用,但我还是对该解决方案表示赞赏。谢谢!