पायथन नियमित अभिव्यक्तियाँ सही / गलत होती हैं


114

पायथन नियमित अभिव्यक्तियों का उपयोग करके आप कैसे True/ a Falseलौटा सकते हैं? सभी पायथन रिटर्न हैं:

<_sre.SRE_Match object at ...>

जवाबों:


140

Matchऑब्जेक्ट हमेशा सत्य होते हैं, और Noneअगर कोई मिलान नहीं है, तो लौटा दिया जाता है। सिर्फ ट्रूनेस के लिए टेस्ट करें।

if re.match(...):

21
यदि स्ट्रिंग की शुरुआत का हिस्सा नियमित पैटर्न से मेल खाता है, तो re.match (...) सही लौटेगा। जबकि खोज स्ट्रिंग में कहीं भी पैटर्न की पुष्टि करेगा।
यू शेन

8
इसके if re.match(...) is None:बजाय उपयोग करने के लिए यह अधिक वांछनीय हो सकता है
नाभिकीय पाद

क्षमा करें, क्या आपने अपने उत्तर में टिप्पणियों को संबोधित किया है? मेरे लिए यह स्पष्ट नहीं है, क्या आप स्पष्ट करते हैं?
चार्ली पार्कर

2
क्या मैं पूछ सकता हूं कि re ऐसा क्यों बनाया गया है? यदि matchवस्तुएं हमेशा सच होती हैं, तो यह सिर्फ Trueपहले स्थान पर क्यों नहीं लौटती है, यह देखते हुए कि हमें हमेशा यह जानना होगा कि उत्तर सही है या गलत?
यतु

1
@ytu: क्योंकि तब आप वह सब कुछ कर सकते हैं जिसकी आपको ज़रूरत है
इग्नासियो वाज़केज़-अब्राम्स

149

यदि आपको वास्तव में जरूरत है Trueया False, बस उपयोग करेंbool

>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False

के रूप में अन्य उत्तर ने बताया है, यदि आप सिर्फ एक के लिए एक शर्त के रूप में यह प्रयोग कर रहे हैं ifया whileआप इसे सीधे में रैपिंग के बिना उपयोग कर सकते हैंbool()


1
boolमान की आवश्यकता तब होती है जब सशर्त विवरण में बूलियन अंकगणितीय ऑपरेशन होता है। उदाहरण: if (re.search ("a", "abc") & True):
ऐज़हत सुहर्दी

2
@AizzatSuhardi, &एक बिटवाइज़ ऑपेरशन है। andहोगा बूलियन आपरेशन।
जॉन ला रोय

1
धन्यवाद @JohnLaRooy सुधार:(re.search("a","abc") and True)
अज़ीज़ सुहर्दी

यह इग्नासियो के जवाब से कैसे अलग है?
चार्ली पार्कर

2
boolपाठक के लिए प्रोग्रामर का इरादा स्पष्ट करने में रैपिंग ।
गुइलहर्मे सालोमे

10

इग्नासियो वाज़केज़-अब्राम्स सही है। लेकिन विस्तृत करने के लिए , या re.match()तो वापस आ जाएगा None, जो मूल्यांकन करता है False, या एक मैच ऑब्जेक्ट, जो हमेशा Trueजैसा उसने कहा था वैसा ही होगा । यदि आप अपनी नियमित अभिव्यक्ति से मेल खाने वाले भाग के बारे में जानकारी चाहते हैं, तो आपको मैच ऑब्जेक्ट की सामग्री की जांच करने की आवश्यकता है।


6

ऐसा करने का एक तरीका रिटर्न वैल्यू के खिलाफ परीक्षण करना है। क्योंकि आप इसे प्राप्त कर रहे हैं <_sre.SRE_Match object at ...>इसका मतलब है कि यह सच का मूल्यांकन करेगा। जब नियमित अभिव्यक्ति का मिलान नहीं होता है, तो आप रिटर्न वैल्यू कोई नहीं, जो गलत का मूल्यांकन करता है।

import re

if re.search("c", "abcdef"):
    print "hi"

उत्पादन के hiरूप में उत्पादन करता है।


आपको हमेशा रिटर्न वैल्यू मिलती है; Noneयदि कुछ भी स्पष्ट रूप से वापस नहीं किया गया है तो डिफ़ॉल्ट है।
इग्नासियो वाज़केज़-अब्राम्स

साभार - सही किया मैं बस वही देख रहा था जो मैंने REPL में देखा था।
गेविन एंडरग जुले

4

यहाँ मेरी विधि है:

import re
# Compile
p = re.compile(r'hi')
# Match and print
print bool(p.match("abcdefghijkl"))

1
p = re.comp il e (r'hi ') :-P
क्ले

हाँ और यह "गलत"
Ufos

यदि आप में बदल matchजाते हैं search, तो यह
alofgran

1

आप उपयोग कर सकते हैं re.match()या re.search()। पायथन नियमित अभिव्यक्ति के आधार पर दो अलग-अलग आदिम संचालन प्रदान re.match()करता है : केवल स्ट्रिंग की शुरुआत में re.search()एक मैच की जांच करता है , जबकि स्ट्रिंग में कहीं भी मैच की जांच करता है (यह वही है जो पर्ल डिफ़ॉल्ट रूप से करता है)। उल्लेख इस

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.