मेरे पास एक कॉलम है जिसमें मान शामिल हैं जैसे:

7D  
13M  
24D  
55D  

मैं मूल्यों को अंकों के समूह में विभाजित करना चाहता हूं और दूसरे को पत्र के साथ विभाजित करना चाहता हूं ताकि मैं और मूल्यांकन कर सकूं।

मैं इस फ़ंक्शन के साथ बिल्ट इन रेगेक्स का उपयोग करने के बहुत करीब हूं

def string_split(type: str):
  res = re.findall(('\d+'), type)
  
  if ["d"] in res:
    return "days"
  if ["m"] in res:
    return "months"

अभी मेरा re.findall केवल अंक लौटा रहा है, अक्षर नहीं।

-1
git_rekt 22 जिंदा 2021, 03:30
1
आप इसे पत्र वापस करने की उम्मीद क्यों करेंगे? \d+ केवल संख्याओं से मेल खाता है।
 – 
Barmar
22 जिंदा 2021, 03:32
क्या अंतिम अक्षर हमेशा एक अक्षर होगा?
 – 
goalie1998
22 जिंदा 2021, 03:36
4
क्या आपके तार केवल संख्या-फिर-डी-या-एम के प्रारूप में हैं? इसके लिए रेगेक्स का उपयोग करना अधिक होगा और आप बस numbers, letter = int(s[:-1]), s[-1] कर सकते हैं
 – 
Reti43
22 जिंदा 2021, 03:37
\d+[md] पर विचार करें। यदि आपके पास एक वर्ण और एक अंक है तो केवल मिलान का अतिरिक्त लाभ है।
 – 
Alex Petrosyan
22 जिंदा 2021, 03:42

1 उत्तर

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

re.findall() का प्रयोग न करें। आपके तार हमेशा एक संख्या के बाद एक अक्षर होते हैं। तो एक नियमित अभिव्यक्ति का उपयोग करें जो इसे विभाजित करने के बजाय केवल उस पैटर्न से मेल खाता हो।

def string_split(type: str):
    m = re.match('(\d+)([A-Z])', type)
    if m:
        num = m.group(1)
        unit = m.group(2)
        if unit == 'D':
            return num, 'days'
        elif unit == 'M':
            return num, 'months'
        else:
            raise ValueError('Invalid unit ' + unit)
    else:
        raise ValueError('Invalid interval ' + type)
0
Barmar 22 जिंदा 2021, 03:54
नमस्ते, @Barmar, मिनो typo? होना चाहिए - अगर इकाई == 'डी'
 – 
Daniel Hao
22 जिंदा 2021, 03:51
1
हां, अनुभवी प्रोग्रामर भी उस त्रुटि से प्रतिरक्षित नहीं हैं।
 – 
Barmar
22 जिंदा 2021, 03:54