لا يمكن لـ str_replace (الحزمة stringr) استبدال الأقواس في r؟

StackOverflow https://stackoverflow.com//questions/23065378

  •  26-12-2019
  •  | 
  •  

سؤال

لدي سلسلة، ويقول

 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top