मुझे स्ट्रिंग्स के अंत में केवल टेक्स्ट भाग और उप संख्या निकालने की आवश्यकता है:

'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'9. Ut enim ad minima veniam, quis nostrum exercitationem.2',
'. . . . . 9.1 dolore magnam aliquam quaerat',
'. . . . . 9.1 ed quia consequuntur magni.1',
'. . . . . 9.2 Quis autem vel eum iure reprehenderit.2'

इस तरह:

'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'Ut enim ad minima veniam, quis nostrum exercitationem.2',
'dolore magnam aliquam quaerat',
'ed quia consequuntur magni.1',
'Quis autem vel eum iure reprehenderit.2'

क्या यह संभव है कि पाइथन रेगेक्स में सिंगल re.findall(r'( )', item) के साथ ऐसा करें? ऐसा लगता है कि मैं स्ट्रिंग की शुरुआत में संख्याओं को स्ट्रिंग के अंत में संख्या से 'अलग' करने में सक्षम नहीं हूं।

मैंने निम्नलिखित कोड के साथ उदाहरण के लिए प्रयास किया है:

string ='. . . . . 9.2 Quis autem vel eum iure reprehenderit.2' 
string = re.findall(r'([a-öA-Ö0-9/:._]+)',string)
string = ' '.join( list(filter(lambda x: x != '.', string)))

यह देता है:

'9.2 Quis autem vel eum iure reprehenderit.2'

लेकिन यह सामने की संख्या को नहीं हटाता है, जटिल है और मूल पाठ को भी विभाजित करता है और बीच में स्थान के साथ वापस जुड़ जाता है। मैं उस स्ट्रिंग को काटना चाहता हूं जहां टेक्स्ट शुरू होता है और मूल टेक्स्ट भाग को वास्तव में स्पर्श नहीं करना चाहता, उदाहरण के लिए शब्दों के बीच दो रिक्त स्थान हो सकते हैं, लेकिन उन्हें संरक्षित किया जाना चाहिए।

-2
mpeli 10 अप्रैल 2020, 21:33
क्या आप रेगेक्स दिखा सकते हैं जिसे आपने अभी तक आजमाया है? धन्यवाद।
 – 
ggorlen
10 अप्रैल 2020, 21:35
आपको अपने प्रश्न में रेगेक्स पर एक प्रयास शामिल करना चाहिए और इसमें क्या गलत है। यदि आप ऐसा कर सकते हैं तो आपको बेहतर प्रतिक्रियाएँ मिलेंगी। मैं मदद करने का प्रयास करूंगा लेकिन मुझे वास्तव में ऐसा नहीं करना चाहिए। regex101.com/r/L6D8Dp/1
 – 
MDR
10 अप्रैल 2020, 21:49
मामला क्या है, बिल्कुल? कृपया देखें कैसे पूछें, सहायता केंद्र.
 – 
AMC
10 अप्रैल 2020, 22:15
धन्यवाद, अच्छा काम करता है। मुझे स्पष्ट नहीं लग रहा है, लेकिन मैं इसका अध्ययन करूंगा।
 – 
mpeli
10 अप्रैल 2020, 23:00
जब तक आप वाक्य रचना का अध्ययन करने के लिए कुछ समय नहीं लेते हैं, तब तक Regex पूर्ण gobbledygook है; ओ)
 – 
MDR
10 अप्रैल 2020, 23:16

3 जवाब

अधिक जटिल नियमित अभिव्यक्ति का उपयोग करने का प्रयास करें, उदाहरण के लिए:

import re

expression = re.compile(r'(.*?[0-9].+? )*(.+)')

# this is a list of tuples, and you are always interested in the last match
results = expression.findall('<string>')[-1][-1]
1
jcaliz 10 अप्रैल 2020, 22:02
धन्यवाद यह भी काम करता है, हालांकि मुझे यह अध्ययन करने की ज़रूरत है कि यह कैसे काम करता है :)
 – 
mpeli
10 अप्रैल 2020, 23:08

आप नियमित अभिव्यक्ति से मेल खाने वाले सबस्ट्रिंग को परिवर्तित कर सकते हैं (केस-उदासीन ध्वज सेट के साथ)

(?<=^')[^a-z]+

खाली तारों को।

डेमो

रेगुलर एक्सप्रेशन पढ़ता है, "अक्षरों के अलावा एक या एक से अधिक वर्णों का मिलान करें जो एक पंक्ति की शुरुआत में एक उद्धरण का अनुसरण करते हैं", (?<=^') एक सकारात्मक लुकबैक है।

1
Cary Swoveland 10 अप्रैल 2020, 21:55
धन्यवाद, यह काम करता है जैसा कि मैं regex101 में चाहता हूं, लेकिन पायथन में मैं इसे काम पर नहीं ला सकता। अफ़सोस की बात है क्योंकि यह मेरे लिए अब तक का सबसे सरल प्रस्ताव है। स्ट्रिंग = '। . . . . 9.2 क्विज़ ऑटम वेल ईम आईयूरे रिप्रेहेन्डरिट.2' परिणाम = फिर से ढूँढें (आर"(?<=^)[^a-z]+", स्ट्रिंग, फ़्लैग्स=re.IGNORECASE) परिणाम देता है = ['। . . . . 9.2 '] , यह वही हिस्सा है जिसकी मुझे आवश्यकता नहीं है। अगर मेरे पास परिणाम = re.findall(r"(?<=^')[^a-z]+", string, flags=re.IGNORECASE) है, तो मुझे परिणाम = [] मिलता है। वह छोटा 'मात्र अंतर है
 – 
mpeli
10 अप्रैल 2020, 23:57
Mpeli, मैंने सोचा था कि मेरा पायथन कोड यहां काम करना चाहिए लेकिन यह तथ्य कि यह मेरे निकट पर प्रतिबिंबित नहीं होना चाहिए- रेगेक्स के बजाय पायथन का शून्य ज्ञान। आप मेरे उत्तर में लिंक पर देख सकते हैं कि मेरे द्वारा दिए गए रेगेक्स के मिलान, जब खाली तारों से प्रतिस्थापित किया जाता है, वांछित परिणाम प्रदान करता है। इसके अलावा, रूबी में, str.gsub(/(?<=^)[^a-z]+/, '') सही परिणाम देता है। शायद आप या कोई अन्य पाठक मेरे पायथन कोड में कोई त्रुटि खोज सकते हैं।
 – 
Cary Swoveland
11 अप्रैल 2020, 00:47

शायद...

import re

text = """
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'9. Ut enim ad minima veniam, quis nostrum exercitationem.2',
'. . . . . 9.1 dolore magnam aliquam quaerat',
'. . . . . 9.1 ed quia consequuntur magni.1',
'. . . . . 9.2 Quis autem vel eum iure reprehenderit.2'
"""

pattern = re.compile(r".*?(\d\.\d? )")

print(pattern.sub(r"'", text))

आउटपुट:

'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'Ut enim ad minima veniam, quis nostrum exercitationem.2',
'dolore magnam aliquam quaerat',
'ed quia consequuntur magni.1',
'Quis autem vel eum iure reprehenderit.2'
1
MDR 10 अप्रैल 2020, 22:38
धन्यवाद, यह भी काम करता है। कुल मिलाकर री 'वर्तनी' यहां सरल दिखती है, यह सुनिश्चित नहीं है कि उप (आर "' ",) वास्तव में क्या करता है, क्यों ' होना चाहिए, अनुमान कुछ गहरे वाक्यविन्यास से आता है ...
 – 
mpeli
10 अप्रैल 2020, 23:38