2013-08-30 10 views
6

मेरे पास अंक से अलग शब्दों के साथ तार हैं। उदाहरण:पायथन: एक वाइल्डकार्ड शब्द पट्टी

string1 = 'one.two.three.four.five.six.eight' 
string2 = 'one.two.hello.four.five.six.seven' 

कैसे मैं एक अजगर विधि में इस स्ट्रिंग का उपयोग, (क्योंकि इस मामले उदाहरण के लिए तीसरे शब्द भिन्न होता है में) वाइल्डकार्ड के रूप में एक शब्द बताए है। मैं नियमित अभिव्यक्तियों के बारे में सोच रहा हूं, लेकिन यह नहीं पता कि मेरे जैसे दृष्टिकोण को ध्यान में रखना संभव है या नहीं। उदाहरण के लिए:

string1.lstrip("one.two.[wildcard].four.") 

या

string2.lstrip("one.two.'/.*/'.four.") 

उत्तर

18

उपयोग करें (मुझे पता है कि मैं split('.')[-3:] द्वारा इस निकाल सकते हैं, लेकिन मैं एक सामान्य तरीके से देख रहा हूँ, lstrip सिर्फ एक उदाहरण है) मूल_स्ट्रिंग:

>>> import re 
>>> string1 = 'one.two.three.four.five.six.eight' 
>>> string2 = 'one.two.hello.four.five.six.seven' 
>>> re.sub(r'^one\.two\.\w+\.four', '', string1) 
'.five.six.eight' 
>>> re.sub(r'^one\.two\.\w+\.four', '', string2) 
'.five.six.seven' 
से मिलान भाग को निकालने के लिए

BTW, आप str.lstrip गलतफहमी रहे हैं:

>>> 'abcddcbaabcd'.lstrip('abcd') 
'' 

str.replace अधिक उपयुक्त है (बेशक, re.sub, भी):

>>> 'abcddcbaabcd'.replace('abcd', '') 
'dcba' 
>>> 'abcddcbaabcd'.replace('abcd', '', 1) 
'dcbaabcd' 
+0

धन्यवाद! और आपके "बीटीडब्ल्यू" के लिए: क्या केवल "abcd" को पट्टी करने की संभावना है जिसे सही तरीके से आदेश दिया गया है? या यह केवल regex के लिए एक मामला है? – aldorado

+0

@aldorado, 'abcddcbaabcd'.replace (' abcd ',' ', 1) '। '1' का अर्थ केवल एक बार बदलना है। – falsetru

+2

@aldorado, मैंने एक और कोड जोड़ा जो 'str.replace' का नमूना उपयोग दिखाता है। – falsetru

संबंधित मुद्दे