لا يمكن لـ str_replace (الحزمة stringr) استبدال الأقواس في r؟
سؤال
لدي سلسلة، ويقول
fruit <- "()goodapple"
أريد إزالة الأقواس الموجودة في السلسلة.قررت استخدام حزمة stringr لأنها عادةً ما يمكنها التعامل مع هذا النوع من المشكلات.أنا أستعمل :
str_replace(fruit,"()","")
ولكن لم يتم استبدال أي شيء، وتم استبدال ما يلي:
[1] "()good"
إذا كنت أرغب فقط في استبدال نصف القوس الأيمن، فسيعمل:
str_replace(fruit,")","")
[1] "(good"
ومع ذلك، فإن نصف القوس الأيسر لا يعمل:
str_replace(fruit,"(","")
ويظهر الخطأ التالي:
Error in sub("(", "", "()good", fixed = FALSE, ignore.case = FALSE, perl = FALSE) :
invalid regular expression '(', reason 'Missing ')''
هل لدى أي شخص أفكار لماذا يحدث هذا؟كيف يمكنني إزالة "()" في السلسلة إذن؟
المحلول
الهروب من الأقواس يفعل ذلك ...
str_replace(fruit,"\\(\\)","")
# [1] "goodapple"
قد ترغب أيضًا في التفكير في استكشاف حزمة "ستريني"., ، والتي لها نهج مشابه لـ "stringr" ولكن لديها وظائف أكثر مرونة.على سبيل المثال، هناك stri_replace_all_fixed
, ، والذي سيكون مفيدًا هنا نظرًا لأن سلسلة البحث الخاصة بك عبارة عن نمط ثابت، وليس نمط regex:
library(stringi)
stri_replace_all_fixed(fruit, "()", "")
# [1] "goodapple"
بالطبع الأساسية gsub
يتعامل مع هذا بشكل جيد أيضًا:
gsub("()", "", fruit, fixed=TRUE)
# [1] "goodapple"
نصائح أخرى
الإجابة المقبولة تعمل لمشكلتك الدقيقة، ولكن ليس للمشكلة العامة:
giveacodicetagpre.هذا لأن Regex يطابق تماما "(" تليها ")".
على افتراض أنك تهتم فقط حول أزواج قوس، وهذا هو الحل الأقوى:
giveacodicetagpre.تبنى إجابة MJH، وهذا يزيل الكل (أو):
giveacodicetagpre.