我在R中有以下字符串:
string1 = "A((..A>B)A"
我想删除所有标点符号,以及>
之后的字母,即>B
这是我想要的输出:
output = "AAA"
我尝试使用gsub()
,如下所示:
output = gsub("[[:punct:]]","", string1)
但这会产生AABA
,它会保留紧随其后的字符。
答案 0 :(得分:7)
这将首先使用您的工作加上一个领先的lookbehind来查找>
字符后面的内容。
gsub('(?<=>).|[[:punct:]]', '', "A((..A>B)A", perl=TRUE)
## [1] "AAA"
答案 1 :(得分:2)
不使用perl的一个稍微复杂的正则表达式似乎也适用于这个例子:
gsub("[[:punct:]]|>(.)", "", "A((..A>B)A")
[1] "AAA"
答案 2 :(得分:1)
你说
在
之后立即删除所有 标点符号 和 字母>
标点符号与[[:punct:]]
匹配,并且字母可以与[[:alpha:]]
匹配,因此,您可以使用带有gsub
的TRE正则表达式:
string1 = "A((..A>B)A"
gsub(">[[:alpha:]]|[[:punct:]]", "", string1)
# => [1] "AAA"
请注意>
也是与[[:punct:]]
匹配的字符,因此,您不需要在此处查看任何内容,只需将其删除即可。
模式详情:
>[[:alpha:]]
- >
和任何字母|
- 或[[:punct:]]
- 标点符号。