gpt4 book ai didi

R - 替换正则表达式中的第 1 组匹配但不是完全匹配

转载 作者:行者123 更新时间:2023-12-04 01:57:30 24 4
gpt4 key购买 nike

假设我想提取字母 ac 之间的所有字母。到目前为止,我一直在使用 stringr 包,它可以清楚地了解完整的匹配项和组。例如,该包将提供以下内容。

library(stringr)
str_match_all("abc", "a([a-z])c")
# [[1]]
# [,1] [,2]
# [1,] "abc" "b"

假设我只想替换组,而不是完全匹配---在本例中是字母b。但是,以下内容将替换完整匹配项。

str_replace_all("abc", "a([a-z])c", "z")
[1] "z"
# Desired result: "azc"

请问有什么好的方法可以只替换捕获组吗?假设我想进行多场比赛。

str_match_all("abcdef", "a([a-z])c|d([a-z])f")
# [[1]]
# [,1] [,2] [,3]
# [1,] "abc" "b" NA
# [2,] "def" NA "e"
str_replace_all("abcdef", "a([a-z])c|d([a-z])f", "z")
# [1] "zz"
# Desired result: "azcdzf"

Matching groups很简单,但是当需要更换时我还没有找到解决方案。

最佳答案

这不是正则表达式的设计方式。捕获是一种获取所需字符串部分的机制,在替换时,它用于保留匹配部分,而不是丢弃

因此,一个自然的解决方案是将您需要保留的内容包装在捕获组中。

在这种情况下,使用

str_replace_all("abc", "(a)[a-z](c)", "\\1z\\2")

或者环视(如果后视是固定/已知宽度模式):

str_replace_all("abc", "(?<=a)[a-z](?=c)", "z")

关于R - 替换正则表达式中的第 1 组匹配但不是完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49568451/

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