आप एक ऐसा पैटर्न कैसे बनाएंगे जो किसी भी चरित्र को लेने में सक्षम हो, लेकिन बाद के किसी भी चरित्र को पहले जैसा ही होना चाहिए? उदाहरण के लिए, ax + bx + x, जहाँ a, b, और x कोई भी वर्ण हो सकते हैं, लेकिन 'x' वर्ण वही रहना चाहिए। मैं क्वाड्रैटिक्स (कुल्हाड़ी ^ 2 + बीएक्स + सी) को पहचानने के लिए एक पैटर्न बनाने की कोशिश कर रहा हूं, लेकिन मुझे एहसास हुआ कि मेरे पैटर्न के साथ, 2 अलग-अलग अक्षरों का उपयोग पैटर्न से मेल खाएगा। नमूना:

 r"([\d+]*)([\D])\^2\+?\-?([\d+]*)([^\+\-\d])\+?\-?([\d+])+$"
0
RenWarRen 30 मार्च 2017, 22:26
1
यह पायथन-विशिष्ट नहीं है, रेगेक्स सिंटैक्स पर पढ़ें। यदि आप उन्हें परिभाषित करते हैं तो आप पहले के कैप्चरिंग समूहों के संदर्भों का उपयोग कर सकते हैं।
 – 
jonrsharpe
30 मार्च 2017, 22:31
इधर-उधर खेलें: regex101.com
 – 
wwii
30 मार्च 2017, 23:22

1 उत्तर

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

यह एक पार्सर के लिए एक बेहतर काम हो सकता है। भले ही वह सिर्फ मैचिंग के लिए ही क्यों न हो। हालाँकि यदि आप रेगेक्स का उपयोग करने पर जोर देते हैं, तो यह करके किया जा सकता है:

^(?:\d+|\D)(\D)(?:[+\-*\/^](?:\d+\1?|\D\1?))+$

जो इनपुट से मेल खाएगा जैसे:

ax
ax+bx+x
ay+ay+y
ax^2+bx+c

यह \D का मिलान करके और फिर बाद वाले \D को कैप्चर करके काम करता है। फिर हर बार जब उसे 2 वर्ण मिलते हैं, तो दूसरा वर्ण पहले से मेल खाने वाले वर्ण (\D\1?) का होना चाहिए।

सजीव पूर्वावलोकन

यदि आप पहले से 2+ जैसी चीजें प्राप्त करने में सक्षम होना चाहते हैं। तब यह थोड़ा और मुश्किल हो जाता है:

^(?:\d+[+\-*\/^](?:\d+[+\-*\/^])*)?\D(\D)(?:[+\-*\/^](?:\d+\1?|\D\1?))*$

जो इनपुट से मेल खाएगा जैसे:

ax
ax+bx+x
ay+ay+y
ax^2+bx+c
2+ax
2+ax+bx
2-1+ax+bx

सजीव पूर्वावलोकन

यदि आपको दशमलवों का मिलान करना है न कि केवल पूर्णांकों का, तो उन \d+ को \d+(?:\.\d+)? में बदलें।

^(?:\d+(?:\.\d+)?[+\-*\/^](?:\d+(?:\.\d+)?[+\-*\/^])*)?\D(\D)(?:[+\-*\/^](?:\d+(?:\.\d+)?\1?|\D\1?))*$

ध्यान दें कि यह रिक्त स्थान को ध्यान में नहीं रखता है, इसलिए यदि आवश्यक हो तो आपको कुछ \s* चारों ओर छिड़कना होगा।

0
vallentin 30 मार्च 2017, 23:17