यह एक मूर्खतापूर्ण प्रश्न हो सकता है लेकिन मुझे इसे हल करने का कोई अच्छा तरीका नहीं मिल रहा है। मैं कुछ स्ट्रिंग्स में संख्याओं को कैप्चर करना चाहता हूं जिसमें 3 अंकों के प्रत्येक समूह के बीच एक सफेद स्थान होता है। उदाहरण के लिए "45 000 €"।

मैं कुछ रेगेक्स ऑपरेशन के साथ आसानी से संख्याओं को कैप्चर कर सकता हूं लेकिन मैं सीधे सफेद स्थान को हटाने का प्रबंधन नहीं करता, यानी मुझे "45000" के बजाय "45 000" मिलता है।

import re
digits = re.findall(r"(\d+\s?\d*)", "Salary between 35 000 € and 45 000 €")
print(digits)

रिटर्न:

['35 000', '45 000']

जबकि मैं सीधे चाहता हूं:

['35000', '45000']

बेशक उसके बाद मैं हर नंबर के लिए सफेद जगह को हटाने के लिए सूची समझ का उपयोग कर सकता था लेकिन रेगेक्स के साथ एक और सीधा समाधान होना चाहिए, है ना? मैंने गैर कैप्चरिंग समूह के साथ खेलने या चारों ओर देखने की कोशिश की, लेकिन कोई सफलता नहीं मिली (या तो सफेद स्थान रहता है, या संख्याओं को दो में छोटा कर दिया जाता है)।

आपकी मदद के लिए Thx

0
GHarel 14 जुलाई 2019, 22:06

1 उत्तर

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

यह अभिव्यक्ति संभवतः ऐसा कर सकती है:

(?<=\d)\s+(?=\d)

एक re.sub के साथ, तो हम एक साधारण re.findall करेंगे।

import re

test_str = "Salary between 35 000 € and 45 000 € 35 000 000    0 0 0 €"

print(re.findall(r"(\d+)", re.sub(r"(?<=\d)\s+(?=\d)", "", test_str)))

उत्पादन

['35000', '45000', '35000000000']

अगर आप एक्सप्लोर करना/सरल बनाना चाहते हैं, तो इस अभिव्यक्ति को इस डेमो के ऊपरी दाएं पैनल पर समझाया गया है / इसे संशोधित करें।

2
Emma 14 जुलाई 2019, 22:15