【发布时间】:2017-07-17 17:38:02
【问题描述】:
我在 R 中有以下字符串:
string1 = "A((..A>B)A"
我想删除所有标点符号,以及紧跟在> 之后的字母,即>B
这是我想要的输出:
output = "AAA"
我尝试如下使用gsub():
output = gsub("[[:punct:]]","", string1)
但这给出了AABA,它保留了紧随其后的字符。
【问题讨论】:
我在 R 中有以下字符串:
string1 = "A((..A>B)A"
我想删除所有标点符号,以及紧跟在> 之后的字母,即>B
这是我想要的输出:
output = "AAA"
我尝试如下使用gsub():
output = gsub("[[:punct:]]","", string1)
但这给出了AABA,它保留了紧随其后的字符。
【问题讨论】:
这将使用您的工作加上先行的后向先查找> 字符之后的内容。
gsub('(?<=>).|[[:punct:]]', '', "A((..A>B)A", perl=TRUE)
## [1] "AAA"
【讨论】:
不使用 perl 的稍微简单的正则表达式似乎也适用于本示例:
gsub("[[:punct:]]|>(.)", "", "A((..A>B)A")
[1] "AAA"
【讨论】:
你说
删除所有标点符号,以及紧跟
之后的字母>
标点符号与[[:punct:]]匹配,字母可以与[[:alpha:]]匹配,因此,您可以使用带有gsub的TRE正则表达式:
string1 = "A((..A>B)A"
gsub(">[[:alpha:]]|[[:punct:]]", "", string1)
# => [1] "AAA"
注意,> 也是一个与[[:punct:]] 匹配的字符,因此,您不需要在此处进行任何环视,只需将其删除,并在其后加上一个字母即可。
模式详情:
>[[:alpha:]] - > 和任何字母| - 或[[:punct:]] - 标点或符号。【讨论】: