मैं एक समस्या बयान में आया था जहां मुझे पहले चार को एक वाक्य में और बाद में आने वाले शब्दों के चार को कैपिटल करना था। मैं रेगेक्स का उपयोग करके समाधान के साथ आया लेकिन मुझे काम पूरा करने के लिए दो नियमित अभिव्यक्तियों का उपयोग करना पड़ा।

क्या इन दो रेगेक्स अभिव्यक्तियों को एक में जोड़ने का कोई तरीका है?

import re
def capitalize(string):
    l2 = re.findall(r'([^\d][a-zA-Z]+\w*)', string) # reg exp1 
    l4 = re.findall(r'(^[a-zA-Z]+\w*)', string) # reg exp2 
    #  Is there a way of combining these? 
    if l4 not in l2:
        l2.extend(l4)
    l3 = {e: e.title() for e in l2}
    newstring = string
    for item in l3:
        newstring = newstring.replace(item, l3[item])
    return newstring


validatorvalue = 'q w e r  G H J  K  M' # => o/p  'Q W E R  G H J  K  M'
# validatorvalue = 'hello   world  lol' => o/p  'Hello   World  Lol'
# validatorvalue = "1 w 2 r 3g"   => "1 W 2 R 3g"
print(capitalize(validatorvalue))

मुझे इन दोनों रेगेक्स के साथ रहना पड़ा, क्योंकि उपरोक्त 2 टेस्ट केस मानदंडों को पारित करने का यही एकमात्र तरीका था।

2
Abhishek 31 मार्च 2018, 18:45

2 जवाब

title विधि ऐसा करती है।

>>> my_string='hello world i need some capital letters'
>>> my_string.title()
'Hello World I Need Some Capital Letters'
4
Carl H 6 नवम्बर 2018, 16:10

आप मोइनुद्दीन के गैर-रेगेक्स समाधान का उपयोग कर सकते हैं यदि आप "शब्दों" को बड़े अक्षरों में लिखना चाहते हैं जो अलग-अलग स्थान हैं।

यदि शब्द विराम चिह्न से चिपके हुए हैं और उन्हें भी बड़े अक्षरों में लिखने की आवश्यकता है तो आप इसका उपयोग कर सकते हैं

re.sub(r'\b[a-z]', lambda x: x.group().upper(), validatorvalue)

पायथन ऑनलाइन डेमो देखें। \b एक शब्द सीमा से मेल खाता है और [a-z] एक लोअरकेस ASCII अक्षर से मेल खाता है।

या, इसे सभी यूनिकोड अक्षरों में विस्तारित करने के लिए,

re.sub(r'\b[^\W\d_]', lambda x: x.group().upper(), validatorvalue)

पायथन 2 में, आपको re.U संशोधक को \W और \d आशुलिपि वर्ण वर्ग यूनिकोड-जागरूक बनाने के लिए पास करना होगा।

1
Wiktor Stribiżew 31 मार्च 2018, 18:03