2011-01-04 18 views
6

मान लीजिए कि मेरे पास कुछ स्ट्रिंग है: "Lorem ipsum dolor sit amet" मुझे 3 से अधिक के साथ सभी शब्दों की एक सूची चाहिए। क्या मैं इसे नियमित अभिव्यक्तियों के साथ कर सकता हूं?नियमित अभिव्यक्ति से मेल खाने वाले सभी शब्दों की सूची

उदा।

pattern = re.compile(r'some pattern') 
result = pattern.search('Lorem ipsum dolor sit amet').groups() 

परिणाम में 'Lorem', 'ipsum', 'dolor' और 'amet' शामिल हैं।

संपादित:

शब्द मेरा मतलब केवल अक्षर और संख्याएं हों कर सकते हैं।

+0

आप ASCII अक्षरों मतलब है, या उच्चारण चिह्न वर्ण आदि जैसे अंतरराष्ट्रीय पत्र भी प्रासंगिक हैं है का उपयोग करना होगा? –

उत्तर

14
>>> import re 
>>> myre = re.compile(r"\w{4,}") 
>>> myre.findall('Lorem, ipsum! dolor sit? amet...') 
['Lorem', 'ipsum', 'dolor', 'amet'] 

ध्यान दें कि अजगर 3, जहां सभी तार कर रहे हैं में यूनिकोड, यह उन शब्दों को भी मिलेगा जो गैर-ASCII अक्षरों का उपयोग करते हैं:

>>> import re 
>>> myre = re.compile(r"\w{4,}") 
>>> myre.findall('Lorem, ipsum! dolör sit? amet...') 
['Lorem', 'ipsum', 'dolör', 'amet'] 

अजगर 2 में, आप

>>> myre = re.compile(r"\w{4,}", re.UNICODE) 
>>> myre.findall(u'Lorem, ipsum! dolör sit? amet...') 
[u'Lorem', u'ipsum', u'dol\xf6r', u'amet'] 
2

अजगर में सूची comprehensions के लिए एक tipical उपयोग के मामले, जो छानने के लिए इस्तेमाल किया जा सकता है कि:

text = 'Lorem ipsum dolor sit amet' 
result = [word for word in pattern.findall(text) if len(word) > 3] 
+0

लेकिन अगर मेरे पास "Lorem, ipsum" है तो क्या होगा? यह अभिव्यक्ति 'Lorem,' 'ipusm' वापस आ जाएगी। मुझे कॉमा की जरूरत नहीं है। – szaman

+0

ठीक है - मैंने इसे वास्तव में रेगेक्स का उपयोग करने के लिए अपडेट किया - अन्य सशक्त मानते थे कि आपको रेगेक्स की भी आवश्यकता नहीं होगी। Regexes की "findall" विधि वह है जो आप गायब हैं। – jsbueno

2

pattern = re.compile("\w\w\w(\w+)")
result = pattern.search('Lorem ipsum dolor sit amet').groups()

+0

"अब आपको दो समस्याएं हैं।" : डी http://regex.info/blog/2006-09-15/247 – daramarak

0
pattern = re.compile(r'(\S{4,})') 
pattern.findall('Lorem ipsum dolor sit amet') 
['Lorem', 'ipsum', 'dolor', 'amet'] 
+0

मेरे उत्तर की उपेक्षा करते हैं। टिम Pietzcker के हैंडल मामलों जैसे "बैठो?" अच्छी तरह – albertov

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

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