2012-11-16 4 views
20
import re 
str="x8f8dL:s://www.qqq.zzz/iziv8ds8f8.dafidsao.dsfsi" 

str2=re.match("[a-zA-Z]*//([a-zA-Z]*)",str) 
print str2.group() 

current result=> error 
expected => wwwqqqzzz 

के साथ स्ट्रिंग निकालें मैं स्ट्रिंग wwwqqqzzz निकालना चाहता हूं। मैं वह कैसे करता हूं?पायथन re.match

हो सकता है कि वहाँ इस तरह के रूप डॉट्स, का एक बहुत कुछ कर रहे हैं:

"whatever..s#[email protected]:af//wwww.xxx.yn.zsdfsd.asfds.f.ds.fsd.whatever/123.dfiid" 

इस मामले में, मैं मूल रूप से सामान // और / से घिरा चाहते हैं। मैं इसे कैसे प्राप्त करूं?

एक अतिरिक्त प्रश्न:

import re 
str="xxx.yyy.xxx:80" 

m = re.search(r"([^:]*)", str) 
str2=m.group(0) 
print str2 
str2=m.group(1) 
print str2 

लगता है कि m.group(0) और m.group(1) ही हैं।

+0

आप चाहते हैं डॉट्स अंतिम स्ट्रिंग से निकाले जाने का क्या ज़रूरत है? – danseery

+0

हां, मैं बस // // के बीच पूरी तरह से अक्षर [ए-जेए-जेड] * चाहता हूं, '//' के पास गुच्छा अक्षर हैं, अंत में '/' के बाद भी, – runcode

उत्तर

35

matchसंपूर्ण स्ट्रिंग से मिलान करने का प्रयास करता है। इसके बजाय search का उपयोग करें। निम्नलिखित पैटर्न तो आपकी आवश्यकताओं से मेल होगा:

m = re.search(r"//([^/]*)", str) 
print m.group(1) 

असल में, हम / लिए देख रहे हैं, तो संभव के रूप में कई गैर स्लैश वर्ण खपत करते हैं। और उन गैर-स्लैश पात्रों को समूह संख्या 1 में पकड़ा जाएगा।

वास्तव में, एक और अधिक उन्नत तकनीक है जो वही करती है, लेकिन कैप्चरिंग (जो आम तौर पर समय लेने वाली होती है) की आवश्यकता नहीं होती है। यह का उपयोग करता है एक तथाकथित lookbehind:

m = re.search(r"(?<=//)[^/]*", str) 
print m.group() 

Lookarounds, वास्तविक मैच में शामिल नहीं हैं इसलिए वांछित परिणाम।

यह (या कोई अन्य उचित रेगेक्स समाधान) . एस तुरंत नहीं हटाएगा। लेकिन यह आसानी से दूसरे चरण में किया जा सकता है:

m = re.search(r"(?<=//)[^/]*", str) 
host = m.group() 
cleanedHost = host.replace(".", "") 

इसमें नियमित अभिव्यक्तियों की भी आवश्यकता नहीं होती है।

बेशक

, आप अक्षर और अंक (जैसे wwwregularexpressionsinfo में www.regular-expressions.info चालू करने के लिए) तो आप replace की regex संस्करण का उपयोग कर बेहतर होगा के अलावा सब कुछ निकालना चाहते हैं:

cleanedHost = re.sub(r"[^a-zA-Z0-9]+", "", host) 
+1

बिंदुओं को कैसे निकालें? – runcode

+1

क्षमा करें, मैंने अभी उस आवश्यकता को देखा है। बस एक और कदम चलाएं: 'resultstr.replace (आर"। "," ") '। एक दूसरे में शामिल होगा। –

+0

ओह ... स्मार्ट! धन्यवाद! – runcode

3
print re.sub(r"[.]","",re.search(r"(?<=//).*?(?=/)",str).group(0)) 

देखें this demo

2
output=re.findall("(?<=//)\w+.*(?=/)",str) 

final=re.sub(r"[^a-zA-Z0-9]+", "", output [0]) 

print final 
-1
import re 
str="x8f8dL:s://www.qqq.zzz/iziv8ds8f8.dafidsao.dsfsi" 
re.findall('//([a-z.]*)', str) 
+0

हालांकि कोड समस्या को हल कर सकता है, लेकिन यह अपने आप का जवाब नहीं है। किसी को हमेशा इसके लिए एक स्पष्टीकरण जोड़ना चाहिए। – BDL