r - 在 r 和正则表达式中,如何检测排除某些混合条件的字符

标签 r regex

我正在尝试检测字符串中的一些点 (.),并将它们替换为单词旁边的相同点,例如“.”变为“.AAA”。但有一些条件我想避免替换:

  1. 如果点之前有一个空格和一个字符
  2. 如果点位于两个连字符 (-) 之间

例如,如果输入是:

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)

请参阅regex demo 。如果您需要精确地确定“任何字符”条件,请将 \\s.\\. 中的未转义点替换为适当的结构。

详细信息:

  • (?s) - 一个 dotall s 标志,使点匹配任何字符,包括换行符
  • (?:\s.\.|-[^-]*-) - 匹配任一的非捕获组
    • \s.\. - 一个空格、任意一个字符、一个点
    • | - 或
    • -[^-]*- - 连字符、除连字符之外的零个或多个字符,然后是连字符
  • (*SKIP)(?!) - 跳过在当前位置失败的匹配,并触发从失败位置搜索下一个匹配
  • | - 或
  • (\.) - 第 1 组:一个点。

关于r - 在 r 和正则表达式中,如何检测排除某些混合条件的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68612942/

相关文章:

php - 仅显示目录名称

ruby - 为什么这个 ruby 正则表达式不起作用?

Java 正则表达式与换行符不匹配

r - 可以在R中使用旧版本的 'stats'软件包吗?

python - 在 Python 2.7 的 Windows7 64 位上安装 rpy2

r - 如何在绘图中制作垂直线段?

正则表达式仅允许字母和某些字符

r - 将Windows版本的R连接到Hadoop

r - 如何绘制 ggplot2 散点图的特定颜色和形状?

c++ - vector 中每个元素的模式匹配