如何更换" |"在R

时间:2018-03-12 17:39:04

标签: r gsub

我有一个包含

的数据框

" HYD_SOA_UNBLOCK〜SOA_BLOCK-UK | SOA_BLOCK-DE || SOA_BLOCK-FR || SOA_BLOCK-IT || SOA_BLOCK-ES |"

我希望结果是 -

" HYD_SOA_UNBLOCK〜SOA_BLOCK-UK | SOA_BLOCK-DE | SOA_BLOCK-FR | SOA_BLOCK-IT | SOA_BLOCK-ES |"

我试过了:

leadtemp$collate = gsub("||","|",leadtemp$collate) 

但它不起作用。

请帮我替换" ||"与" |"

3 个答案:

答案 0 :(得分:1)

正如MrFlick建议的那样,在你的gsub语句中包含fixed = TRUE。出现问题是因为" |"是一个正则表达式运算符。使用fixed = TRUE告诉gsub假设模式是字符串而不是RegEx。

leadtemp$collate = gsub("||","|",leadtemp$collate, fixed=TRUE)

另一种(虽然更复杂)的方法是逃避所有的| s:

leadtemp$collate = gsub("\\|\\|","\\|",leadtemp$collate)

答案 1 :(得分:0)

|是一个元字符。您可以阅读here,但需要使用\转义元字符。 \也是元字符,因此必须以相同的方式将其转义。因此,只要您想在字符串中引用|,就必须放置\\|。这应该使你的代码工作:

leadtemp$collate = gsub("\\|\\|","\\|",leadtemp$collate)

答案 2 :(得分:0)

尝试:

gsub("[|]{2}", "|", leadtemp$collate)

我定义了包含管道字符的字符类,并强制gsub查找恰好两次出现。结果是:

"HYD_SOA_UNBLOCK~SOA_BLOCK-UK|SOA_BLOCK-DE|SOA_BLOCK-FR|SOA_BLOCK-IT|SOA_BLOCK-ES|"