This question already has answers here:
Remove all punctuation except apostrophes in R
(4个答案)
已关闭8年。
我正在清理R中的文本字符串。我想删除除撇号和连字符以外的所有标点符号。这意味着我不能使用
对于上述大多数情况,转义不是问题。但是对于方括号,我确实遇到了问题。这是我尝试过的:
我不希望将
ETA附加试验:
ETA:单个替换是由于未在我的
这样,仅当
(4个答案)
已关闭8年。
我正在清理R中的文本字符串。我想删除除撇号和连字符以外的所有标点符号。这意味着我不能使用
[:punct:]
字符类(除非有一种表达[:punct:] but not '-
的方法)。! " # $ % & ( ) * + , . / : ; < = > ? @ [ \ ] ^ _ { | } ~.
和反引号必须出来。对于上述大多数情况,转义不是问题。但是对于方括号,我确实遇到了问题。这是我尝试过的:
gsub('[abc]', 'L', 'abcdef') #expected behaviour, shown as sanity check
# [1] "LLLdef"
gsub('[[]]', 'B', 'it[]') #only 1 substitution, ie [] treated as a single character
# [1] "itB"
gsub('[\[\]]', 'B', 'it[]') #single escape, errors as expected
gsub('[\\[\\]]', 'B', 'it[]') #double escape, single substitution
# [1] "itB"
gsub('[\\]\\[]', 'B', 'it[]') #double escape, reversed order, NO substitution
# [1] "it[]"
我不希望将
fixed=TRUE
与gsub
一起使用,因为那样会阻止我使用字符类。那么,如何在正则表达式字符类中包括方括号?ETA附加试验:
gsub('[[\\]]', 'B', 'it[]') #double escape on closing ] only, single substitution
# [1] "itB"
gsub('[[\]]', 'B', 'it[]') #single escape on closing ] only, expected error
ETA:单个替换是由于未在我的
perl=T
调用中设置gsub
引起的。 IE:gsub('[[\\]]', 'B', 'it[]', perl=T)
最佳答案
将[:punct:]
与negative lookahead结合使用时,可以使用[:punct:]
(?!['-])[[:punct:]]
这样,仅当
['-]
不存在于(?!['-])
中时,它才被匹配。否定的超前断言'
可确保此条件。当下一个字符是-
或ojit_code时,它将失败,然后完整的表达式将失败。关于regex - 当[:punct:] is too much,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16399483/
10-12 16:39