मैं तार में चरित्र प्रतिस्थापन के साथ एक विशिष्ट समस्या है:

अगर मेरे पास निम्नलिखित तार हैं

"..A.B....c...A..D.."
"A..S.E.Q.......AW.."
".B.C..a...R......Ds"

डॉट्स को बदलने और निम्नलिखित स्ट्रिंग्स प्राप्त करने के लिए मुझे किस रेगेक्स प्रतिस्थापन का उपयोग करना चाहिए:

"A_B_c_A_D"
"A_S_E_Q_AW"
"B_C_a_R_Ds"

मैं आर का उपयोग कर रहा हूँ।

अग्रिम में धन्यवाद!

-3
JorgeHB 22 नवम्बर 2021, 17:28
क्या आपको वास्तव में यहां रेगेक्स की आवश्यकता है? आप केवल वर्णों पर पुनरावृति कर सकते हैं और सरल नियमों के साथ प्रतीकों को हटा / बदल सकते हैं
 – 
geobreze
22 नवम्बर 2021, 17:31
और आपने अब तक क्या प्रयास किया है? यह काम क्यों नहीं किया?
 – 
Limey
22 नवम्बर 2021, 17:36
हां, मैं अपनी समस्या के लिए रेगेक्स कोड चाहता हूं, इसका कारण यह है कि पुनरावृत्ति या किसी अन्य लूप कोड से बचना चाहिए
 – 
JorgeHB
22 नवम्बर 2021, 17:37
मैंने सबसे पहले gsub() के साथ प्रयास किया लेकिन देखा कि यह बहुत अधिक जटिल था और मुझे वांछित से अधिक "_" मिलेगा।
 – 
JorgeHB
22 नवम्बर 2021, 17:38
1
एक स्ट्रिंग s, gsub('\\.*','_',s) के लिए। आपने प्रमुख और अनुगामी वर्ण भी हटा दिए हैं, ताकि s %>% gsub('\\.*','_',.) %>% gsub('^_','',.) %>% gsub('_$','',.)
 – 
PeterK
22 नवम्बर 2021, 17:41

2 जवाब

यहाँ दो भागों में gsub का उपयोग करके एक समाधान है

string = c("..A.B....c...A..D..","A..S.E.Q.......AW..",".B.C..a...R......Ds")

पहले प्रारंभ और समाप्ति बिंदु हटाएं

string2 = gsub("^\\.+|\\.+$", "", string)

अंत में एक या अधिक बिंदुओं को _ से बदलें

string2 = gsub("\\.+", "_", string2)
1
Bastian Andres 22 नवम्बर 2021, 17:42

अंत में नोट में दिखाए गए x का उपयोग करते हुए, दोनों सिरों को डॉट ट्रिम करने के लिए ट्रिम्स का उपयोग करें। डॉट का मतलब किसी भी कैरेक्टर से है इसलिए हमें उस अर्थ को हटाने के लिए बैकस्लैश से बचना होगा। फिर चार्टर का उपयोग करके प्रत्येक बिंदु को अंडरस्कोर से बदलें। कोई पैकेज उपयोग नहीं किया जाता है।

x |> trimws("both", "\\.") |> chartr(old = ".", new = "_")
## [1] "A_B____c___A__D"    "A__S_E_Q_______AW"  "B_C__a___R______Ds"

ध्यान दें

x <- c("..A.B....c...A..D..",
"A..S.E.Q.......AW..",
".B.C..a...R......Ds")
0
G. Grothendieck 22 नवम्बर 2021, 17:53