मैं वर्ग कोष्ठक में पूर्णांक खोजने का एक कार्य लिखते समय फंस गया हूं, जो एक इनपुट स्ट्रिंग से सभी पूर्णांकों को खोजना चाहिए जो एक अतिरिक्त प्रतिबंध को ध्यान में रखते हुए कोष्ठक में संलग्न हैं: संख्या और कोष्ठक के बीच खाली स्थान हो सकता है, लेकिन इसके अलावा कोई अन्य वर्ण नहीं हो सकता है जो पूर्णांक बनाते हैं।

अब तक, मैंने नीचे कोड लिखा है, लेकिन यह +-43 के साथ अंतिम परीक्षण के लिए काम नहीं करता है जिसे पूर्णांक के रूप में नहीं गिना जाना चाहिए। क्या आप इस मुद्दे को हल करने में मेरी मदद कर सकते हैं?

धन्यवाद!

import re

def integers_in_brackets(s):
    l = list(int(s) for s in re.findall(r'\[\s*\+?(-?\d+)\s*\]', s))
    print(l)
    return list(l)

परीक्षण:

integers_in_brackets("  afd [asd] [12 ] [a34]  [ -43 ]tt [+12]xxx")
integers_in_brackets("afd [asd] [12 ] [a34]  [         -43 ]tt [+12]xxx!")
integers_in_brackets("afd [128+] [47 ] [a34]  [ +-43 ]tt [+12]xxx!")
1
man_dji 22 अक्टूबर 2020, 19:02

1 उत्तर

सबसे बढ़िया उत्तर

आपका रेगुलर एक्सप्रेशन काफी हद तक वैकल्पिक प्लस के बाद वैकल्पिक माइनस कहता है। यदि आप यही नहीं चाहते हैं, तो शायद आप या तो प्लस या माइनस चाहते हैं?

r'\[\s*([-+]?\d+)\s*\]'

यदि आप या तो चाहते हैं, लेकिन दोनों नहीं, लेकिन एक माइनस कैप्चर करें, लेकिन प्लस नहीं, तो "वैकल्पिक प्लस अगर तुरंत माइनस द्वारा पीछा नहीं किया जाता है" कहने के लिए एक लुकहेड जोड़ें:

r'\[\s*(?:\+(?!-))?(-?\d+)\s*\]'
2
tripleee 22 अक्टूबर 2020, 19:50