मैं स्ट्रिंग में एक विशिष्ट स्थिति पर स्ट्रिंग '02 d0 'नहीं होने पर बाइट्स के अनुक्रम से मिलान करना चाहूंगा। वह स्थिति जहां दो बाइट्स की यह स्ट्रिंग नहीं हो सकती है बाइट स्थिति 6 और 7 दायीं तरफ 0 वें बाइट से शुरू होती है।नकारात्मक देखो आगे python regex
यह है कि मैं क्या परीक्षण के लिए उपयोग किया गया है है:
#!/usr/bin/python
import re
p0 = re.compile('^24 [\da-f]{2} 03 (01|03) [\da-f]{2} [\da-f]{2} [\da-f]{2} (([^0])| (0[^2])|(02 [^d])|(02 d[^0])) 01 c2 [\da-f]{2} [\da-f]{2} [\da-f]{2} 23')
p1 = re.compile('^24 [\da-f]{2} 03 (01|03) [\da-f]{2} [\da-f]{2} [\da-f]{2} (([^0])|(0[^2])|(02 [^d])|(02 d[^0])) 01')
p2 = re.compile('^24 [\da-f]{2} 03 (01|03) [\da-f]{2} [\da-f]{2} [\da-f]{2} (([^0])|(0[^2])|(02 [^d])|(02 d[^0]))')
p3 = re.compile('^24 [\da-f]{2} 03 (01|03) [\da-f]{2} [\da-f]{2} [\da-f]{2} (?!02 d0) 01')
p4 = re.compile('^24 [\da-f]{2} 03 (01|03) [\da-f]{2} [\da-f]{2} [\da-f]{2} (?!02 d0)')
yes = '24 0f 03 01 42 ff 00 04 a2 01 c2 00 c5 e5 23'
no = '24 0f 03 01 42 ff 00 02 d0 01 c2 00 c5 e5 23'
print p0.match(yes) # fail
print p0.match(no) # fail
print '\n'
print p1.match(yes) # fail
print p1.match(no) # fail
print '\n'
print p2.match(yes) # PASS
print p2.match(no) # fail
print '\n'
print p3.match(yes) # fail
print p3.match(no) # fail
print '\n'
print p4.match(yes) # PASS
print p4.match(no) # fail
मैं this example को देखा, लेकिन वह विधि कम प्रतिबंधक की तुलना में मैं की जरूरत है। क्या कोई यह समझा सकता है कि क्यों स्ट्रिंग के अंत में नकारात्मक दिखने पर मैं ठीक से मिलान कर सकता हूं? इस विशिष्ट बिट स्थिति में '02 डी 0 'नहीं होने पर मिलान करने के लिए मुझे क्या करने की ज़रूरत है?
मैं केवल एक है जो सोचता है 'हूँ [0-9a-च]' 'से [\ da-च]' अधिक पठनीय है? – ThiefMaster
आपका मतलब है "पद 7 और 8", है ना? – Qtax