我想使用重置匹配標記 ( \K) 在單詞的每個字母之間添加一個句號。我不想使用積極的向后看。
gsub("\\pL\\K", ".", "adskhfks", perl = TRUE)
# [1] "a.ds.kh.fk.s"
由于某些原因,這只適用于每兩個字母(在 macOS 12.31 上使用 RStudio 4.2.0。)。它在regex101上按預期作業。
這是正常的嗎?有解決辦法嗎?
uj5u.com熱心網友回復:
這是一個錯誤,而不是您使用\K運算子的消費模式,您將不得不使用基于后視的模式:
gsub("(?<=\\p{L})", ".", "adskhfks", perl = TRUE)
(?<=\p{L})正向后視匹配緊接在任何 Unicode 字母前面的位置。
或者,具有反向參考的捕獲組:
gsub("(\\p{L})", "\\1.", "adskhfks", perl = TRUE)
在這里,(\p{L})將任何 Unicode 字母捕獲到第 1 組,\1.替換將放回第 1 組的值并在其上附加一個點。
請參閱R 演示:
gsub("\\pL\\K", ".", "adskhfks", perl = TRUE)
# [1] "a.ds.kh.fk.s"
gsub("(?<=\\p{L})", ".", "adskhfks", perl = TRUE)
# [1] "a.d.s.k.h.f.k.s."
gsub("(\\pL)", "\\1.", "adskhfks", perl = TRUE)
# [1] "a.d.s.k.h.f.k.s."
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496675.html
上一篇:使用HTACCESS從ServerVariables中洗掉SERVER_SOFTWARE
下一篇:從字串中提取第一個完整地址
