正则表达式替换“。”到 ”_”

regex substitution "." to "_"

我对字符串中的字符替换有一个具体问题:

如果我有以下字符串

"..A.B....c...A..D.."
"A..S.E.Q.......AW.."
".B.C..a...R......Ds"

我应该使用哪个正则表达式替换来替换点并获得以下字符串:

"A_B_c_A_D"
"A_S_E_Q_AW"
"B_C_a_R_Ds"

我正在使用 R.

提前致谢!

使用 stringr 的精彩 tidyverse

str1 <- "..A.B..c..A..D.."

str1 %>%
  #replace all dots that follow any word character ('\.' escapes search, '+' matches one or more, '(?<=\w)' followed by logic)
  str_replace_all('(?<=\w)\.+(?=\w)', '_') %>%
  #delete remaining dots (i.e. at the start)
  str_remove_all('\.')

一如既往,有很多方法可以用正则表达式给猫蒙皮

这里是分两部分使用 gsub 的解决方案

string = c("..A.B....c...A..D..","A..S.E.Q.......AW..",".B.C..a...R......Ds")

先去掉起点和终点

string2 = gsub("^\.+|\.+$", "", string)

最后用_

替换一个或多个点
string2 = gsub("\.+", "_", string2)

使用末尾注释中显示的 x,使用 trimws 在两端点 trim 点。点表示任何字符,因此我们必须用反斜杠将其转义以删除该含义。然后使用 chartr 将每个点替换为下划线。没有使用包。

x |> trimws("both", "\.") |> chartr(old = ".", new = "_")
## [1] "A_B____c___A__D"    "A__S_E_Q_______AW"  "B_C__a___R______Ds"

备注

x <- c("..A.B....c...A..D..",
"A..S.E.Q.......AW..",
".B.C..a...R......Ds")