2012-03-27 7 views
18

मैं एक स्ट्रिंगपाइथन में वैकल्पिक वर्णों के साथ रेगेक्स का उपयोग कैसे करें?

"3434.35353" 

और एक अन्य स्ट्रिंग है कहो

"3593" 

मैं कैसे मुझे किसी और अगर कुछ करने के लिए प्रतिमान स्थापित करने के लिए बिना एक भी नियमित अभिव्यक्ति है कि दोनों से मेल करने में सक्षम है बनाते हैं अन्य विफल रहता है? मुझे पता है कि \d+3593 से मेल खाता है, लेकिन यह 3434.35353 के लिए कुछ भी नहीं करेगा, लेकिन (\d+\.\d+) केवल दशमलव के साथ एक मैच करेगा और 3593 के लिए कोई मिलान नहीं मिलेगा।

"3434.35353" 

या

"3593" 

उत्तर

32

आप इसे वैकल्पिक बनाने के लिए पात्रों के एक समूह के बाद एक ? रख सकते हैं:

मैं m.group(1) लौटने की उम्मीद है।

आप \.\d+ अंकों के किसी भी संख्या के बाद एक बिंदु चाहते हैं, जिसे (\.\d+), वैकल्पिक रूप से (\.\d+)? समूहीकृत किया गया है। चिपका है कि अपने पैटर्न में:

import re 
print re.match("(\d+(\.\d+)?)", "3434.35353").group(1) 
3434.35353 
print re.match("(\d+(\.\d+)?)", "3434").group(1) 
3434 
1

उपयोग "एक या शून्य" परिमाणक, ?। आपका रेगेक्स बन जाता है: (\d+(\.\d+)?)

उपलब्ध विभिन्न क्वांटिफायरों के बारे में अधिक जानकारी के लिए TextWrangler manual के अध्याय 8 देखें, और उनका उपयोग कैसे करें।

3

इस regex काम करना चाहिए:

\d+(\.\d+)? 

यह एक या अधिक अंक (\d+) वैकल्पिक रूप से एक डॉट और एक या अधिक अंक ((\.\d+)?) के बाद से मेल खाता है।

0

Python RegEx लाइब्रेरी पर पढ़ें। लिंक आपके प्रश्न का उत्तर देता है और बताता है कि क्यों।

हालांकि, एक अंकों एक वैकल्पिक दशमलव के साथ अधिक संख्याएं मेल करने के लिए, आप

re.compile("(\d+(\.\d+)?)") 

इस उदाहरण में, उपयोग कर सकते हैं? .\d+ कैप्चर समूह के बाद यह निर्दिष्ट करता है कि यह हिस्सा वैकल्पिक है।

Example

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