क्या एस्पेस डालने का कोई तरीका है यदि इसमें अपरकेस अक्षर है (लेकिन पहला अक्षर नहीं)?

उदाहरण के लिए, दिए गए "RegularExpression" मैं "रेगुलर एक्सप्रेशन" प्राप्त करना चाहता हूं।

मैंने निम्नलिखित रेगेक्स की कोशिश की:

re.sub("[a-z]{1}[A-Z][a-z]{1}", " ","regularExpression") 

दुर्भाग्य से, यह मिलान पैटर्न को हटा देता है:

regula pression

मैं एक रेगेक्स समाधान पसंद करूंगा, फिर भी किसी भी कामकाजी समाधान के लिए आभारी रहूंगा। धन्यवाद!

0
Bennimi 3 सितंबर 2020, 05:16

5 जवाब

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

आप इसे निम्न के साथ कर सकते हैं:

import re

s = "RegularExpression"
re.sub(r"([A-Z][a-z]+)([A-Z][a-z]+)", r"\1 \2", s)

जिसका अर्थ है "पहले मैच समूह और दूसरे मैच समूह के बीच एक स्थान डालें", जहां मैच समूह एक टोपी के बाद एक या अधिक गैर-कैप होते हैं।

1
erip 3 सितंबर 2020, 05:20

IIUC, एक तरह से re.findall का उपयोग करना:

re.findall("[A-Z][a-z]+", "RegularExpression")

आउटपुट:

['Regular', 'Expression']
0
Chris 3 सितंबर 2020, 05:32

जैसा कि मैं समझता हूं, जब एक अपरकेस अक्षर से पहले एक लोअरकेस अक्षर होता है, तो आप उनके बीच एक स्थान डालना चाहते हैं। आप re.sub का उपयोग करके निम्न रेगुलर एक्सप्रेशन के मिलान (शून्य-चौड़ाई) को रिक्त स्थान से बदलने के लिए कर सकते हैं।

r'(?<=[a-z])(?=[A-Z])'

Regex डेमो <¯\( ツ)> पायथन कोड

ध्यान दें कि रेगेक्स डेमो लिंक पर सबस्टिट्यूशन बॉक्स में एक स्थान होता है।

पायथन का रेगेक्स इंजन निम्नलिखित ऑपरेशन करता है।

(?<=[a-z])  : use a positive lookbehind to assert that the match is preceded
              by a lowercase letter
(?=[A-Z])   : use a positive lookahead to assert that the match is followed
              by an uppercase letter

स्ट्रिंग के लिए 'RegularExpression' रेगेक्स अक्षरों के बीच के स्थान से मेल खाता है 'r' और 'E' (यानी, एक शून्य-चौड़ाई वाला मिलान)।

1
Cary Swoveland 3 सितंबर 2020, 06:12

लुकबिहाइंड "(?<=[a-z])([A-Z])" का उपयोग करके देखें

उदा:

import re

s = "RegularExpression"
print(re.sub(r"(?<=[a-z])([A-Z])", r" \1", s))

आउटपुट:

Regular Expression
1
Rakesh 3 सितंबर 2020, 05:22
In [1]: s = 'RegularExpression'

In [2]: answer = []

In [3]: breaks = [i for i,char in enumerate(s) if char.isupper()]

In [4]: breaks = breaks[1:]

In [5]: answer.append(s[:breaks[0]])

In [6]: for start,end in zip(breaks, breaks[1:]):
   ...:     answer.append(s[start:end])
   ...:

In [7]: answer.append(s[breaks[-1]:])

In [8]: answer
Out[8]: ['Regular', 'Expression']

In [9]: print(' '.join(answer))
Regular Expression
2
inspectorG4dget 3 सितंबर 2020, 05:20