कैपिटल अक्षरों के साथ शब्दों को हटाकर - पायथन, रेगेक्स

मेरे पास शब्द हैं: "objQuery", "बराक ओबामा", "विस्तार योग्य मानचित्र", "mh17", "1717"। मैं पाठ की सफाई कर रहा हूं जो कि कोडिंग भाषाओं के साथ हल्के ढंग से जुड़ा हुआ है

मैं "objQuery" जैसे शब्दों का पता लगाना चाहता हूं जो कि निरंतर हैं यानी बीच में बिना किसी व्हाट्सएप और कैपिटल लेटर्स के (जैसे कुछ कोडिंग लैंग्वेज टोकन की तरह) रेगेक्स की मदद से।

ऐसा करने के लिए नियमित अभिव्यक्ति क्या हो सकती है?

मैंने कोशिश की:

re.search(r"w+[A-Z]+", term)

जो उचित नाम भी ले रहा है।

मैं परिणाम भी चाहते हैं:

सच: "objQuery", "विस्तार योग्य मानचित्र"

कोई भी शब्द जिसमें बीच में कैपिटल लेटर्स हों। शब्द अल्फ़ान्यूमेरिक वर्णों से शुरू हो सकता है। मैं पात्रों के माध्यम से लूप कर सकता हूं और ऐसा करने के लिए एक बूलियन फ़ंक्शन का निर्माण कर सकता हूं, लेकिन मैं कुछ छोटा खोज रहा हूं।

गलत: "बराक ओबामा", "एमएच 17", "एमएच 17"

उत्तर:

जवाब के लिए 3 № 1

मुझे लगता है कि आप इसे ढूंढ रहे हैं।

b[a-z]+(?:[A-Z][a-z]+)+b

डेमो

>>> s = "objQuery Barack Obama expandableMapFoo"
>>> m = re.findall(r"b[a-z]+(?:[A-Z][a-z]+)+b", s)
>>> m
["objQuery", "expandableMapFoo"]

या

b[a-z0-9A-Z]+(?:[A-Z][a-z]+)+b

डेमो


जवाब के लिए 3 № 2

Isn "यह कुछ इस तरह है: [a-z]+[A-Z][a-zA-Z]+, जो भी शब्द विभाजक आवश्यक हैं?

या जैसा कि, जुआन लोप्स ने एक टिप्पणी में सुझाव दिया, [a-z]+[A-Z][a-zA-Z]* अगर आप भी स्ट्रिंग्स की तरह मैच करना चाहते हैं objM


उत्तर № 3 के लिए 1
def check(word):
cap = word[0].isupper()
for i,char in enumerate(word):
if char == " ":
print("whitespace detected. Quitting")
return False
if char.isupper() and not cap:
print("detected upper case in the middle of the word at position", i)

आउटपुट:

In [43]: check("objQuery")
detected upper case in the middle of the word at position 3

In [44]: check("Barack Obama")
whitespace detected. Quitting
Out[44]: False

In [45]: check("expandableMap")
detected upper case in the middle of the word at position 10

संबंधित सवाल
सबसे लोकप्रिय