我试图检测字符串中的一些点 (.),并将它们替换为单词旁边的相同点,例如“.”。变为“.AAA”。但有一些条件我想避免替换:
- 如果点之前有一个空格和一个字符
- 如果点位于两个连字符 (-) 之间
例如,如果输入是:
string <- "first. - second. - third. 4."
我想要的输出是:
"first.AAA - second. - third.AAA 4."
对于第一个条件我可以弄清楚:
str_replace_all("[^ [A-Z19a-z]\\.]([\\.])","\\1AAA")
但在阅读有关前瞻和后视以解决第二个条件并将两者混合在一起时感到困惑。
如果单个字符是指包括换行符在内的任何字符,则可以使用
gsub("(?s)(?:\\s.\\.|-[^-]*-)(*SKIP)(?!)|(\\.)", "\\1AAA", x, perl=TRUE)
See the 正则表达式演示 https://regex101.com/r/7OmM62/1。如果您需要精确地确定“任何字符”条件,请将未转义的点替换为\\s.\\.
具有适当的构造。
Details:
-
(?s)
- 一个多塔尔s
使点匹配任何字符(包括换行符)的标志
-
(?:\s.\.|-[^-]*-)
- a non-capturing group matching either
-
\s.\.
- 一个空白,任意一个字符, a dot
-
|
- or
-
-[^-]*-
- 一个连字符,零个或多个除连字符以外的字符,然后是一个连字符
-
(*SKIP)(?!)
- 跳过在当前位置失败的匹配,并触发从失败位置搜索下一个匹配
-
|
- or
-
(\.)
- 第 1 组:一个点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)