处理正则表达式中的方括号
Posted
技术标签:
【中文标题】处理正则表达式中的方括号【英文标题】:Dealing with square brackets in regex 【发布时间】:2022-01-22 07:19:27 【问题描述】:我有一些数据,如下所示:
df <-
data.frame(
'col' = c(
'some words [remove this] more words',
'some other words [I want this gone] this is fine',
'[nope. get rid of it] but keep this',
'all of this is fine',
'[but] this [should] go [away]')
)
col
1 some words [remove this] more words
2 some other words [I want this gone] this is fine
3 [nope get rid of it] but keep this
4 all of this is fine
5 [but] this [should] go [away]
我想删除所有方括号以及它们之间的所有内容。
goal_df <- df <-
data.frame(
'col' = c(
'some words more words',
'some other words this is fine',
'but keep this',
'all of this is fine',
'this go')
)
col
1 some words more words
2 some other words this is fine
3 but keep this
4 all of this is fine
5 this go
我认为使用正则表达式(这是我最差的编程技能)会是解决方案,但我似乎无法让它发挥作用。我正在使用df$col <- gsub( "[.*?]", "", df$col)
,但这并没有做任何改变。
【问题讨论】:
【参考方案1】:我们可能会匹配[
,后跟一个或多个不是]
的字符,然后是]
和任何空格作为模式,并在gsub
中替换为空格(""
)。 []
是元字符,因此请转义 (\\
)
df$col <- trimws(gsub("\\[[^]]+\\]\\s?", "", df$col))
-输出
> df
col
1 some words more words
2 some other words this is fine
3 but keep this
4 all of this is fine
5 this go
【讨论】:
谢谢!你能解释一下s是什么吗?到底呢?我的正则表达式很糟糕,所以如果这是一个愚蠢的问题,我很抱歉。 @pkpto39 如果我使用\\s
,它将与最后一个不匹配,因为在]
之后没有空格。您可以使用\\s*
。 - 零个或多个空格或进行零个或多个匹配的?
trimws
是个好主意,如果我是你,我会充分利用它(M$ 繁体),在模式的每一侧添加所有最终的空格,以“规范化”它们在单个空间中:trimws(gsub("\\s*\\[[^]]+\\]\\s*", " ", df$col))
【参考方案2】:
一个更容易解析的解决方案是使用*
由?
制作的非贪婪的量词:
gsub("\\s?\\[.*?\\]+", "", df$col)
[1] "some words more words" "some other words this is fine" " but keep this"
[4] "all of this is fine" " this go"
要删除前导或尾随空格,请使用trimws
【讨论】:
以上是关于处理正则表达式中的方括号的主要内容,如果未能解决你的问题,请参考以下文章