首页 > 解决方案 > 如何删除前导和结束分号和空格

问题描述

我想通过 gsubbing 在 data.frame 中替换所有分号。

为此,我使用了这个正则表达式:

(^[;\\s]+)|([;\\s]+$)
gsub("(^[;\\s]+)|([;\\s]+$)", "", x)

原则上它可以工作,但它也匹配前导“s”字符。IE“对称”变成“对称”。

> gsub("(^[;\\s]+)|([;\\s]+$)", "", "Symmetrisch")
[1] "Symmetrisch"
> gsub("(^[;\\s]+)|([;\\s]+$)", "", "symmetrisch")
[1] "ymmetrisch"

这里的表达有什么问题?

标签: rregex

解决方案


[;\\s]模式与空格不匹配,因为您使用的是默认的 TRE 正则表达式风格,并且 TRE 中括号表达式内的反斜杠与文字反斜杠匹配。

有两种解决方案。如果替换\s[:space:](匹配任何空格)或[:blank:](仅匹配水平空格)POSIX 字符类,您仍然可以使用 TRE 正则表达式引擎:

gsub("^[;[:space:]]+|[;[:space:]]+$", "", "symmetrisch")

您还可以切换到 PCRE 引擎:

gsub("^[;\\s]+|[;\\s]+$", "", "symmetrisch", perl=TRUE)

在线查看R 演示。两条代码行都输出[1] "symmetrisch".

注意:括号在您的正则表达式中是多余的,因此我删除了它们。


推荐阅读