gpt4 book ai didi

regex - 当连字符围绕单个内部字符时如何替换词内连字符

转载 作者:行者123 更新时间:2023-12-01 03:35:47 25 4
gpt4 key购买 nike

我想在标记之前保留文本中的字内连字符。该策略涉及用连字符替换唯一字符,然后在标记化后用连字符替换该唯一字符。注意:我最终将使用 Pd 的 Unicode 类捕捉所有形式的破折号字符,但在这里我保持简单,因为我认为这部分与问题无关。

问题:当一个单词包含多个分隔单个字符的内部连字符时,它会失败。

示例和预期结果:

replaceDash <- function(x) gsub("(\\w)-(\\w)", "\\1§\\2", x)

# these are all OK
replaceDash("Hawaii-Five-O")
## [1] "Hawaii§Five§O"
replaceDash("jack-of-all-trades")
## [1] "jack§of§all§trades"
replaceDash("A-bomb")
## [1] "A§bomb"
replaceDash("freakin-A")
## [1] "freakin§A"

# not the desired outcome
replaceDash("jack-o-lantern") # FAILS - should be "jack§o§lantern"
## [1] "jack§o-lantern"
replaceDash("Whack-a-Mole") # FAILS - should be "Whack§a§Mole"
## [1] "Whack§a-Mole"
gsub() 的第一个和第二个表达式需要什么正则表达式模式?

最佳答案

您可以使用带有前瞻的 PCRE 正则表达式来检查单词字符是否紧跟在连字符之后,但不会使用它。

replaceDash <- function(x) gsub("(\\w)-(?=\\w)", "\\1§", x, perl=T)

IDEONE demo

所以, (\\w)将字母数字符号捕获到组 1 中,稍后在 \\1 的帮助下将其插入到替换结果中。反向引用,并使用 (?=\\w)我们只确保有一个单词字符,但正则表达式索引保留在连字符处,从而允许来自该单词字符的下一个匹配。

关于regex - 当连字符围绕单个内部字符时如何替换词内连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072153/

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