2017-01-23 10 views
5

मेरे पास प्रोग्राम बनाने का एक कार्य है जो अंकों के बिना अंकों से मेल खाता है। उन्हें पहले - - लेकिन बिनारेगेक्स - केवल उन नंबरों को कैप्चर करें जिनके पास उनके पास कोई पत्र नहीं है

6x^2 + 6x + 6-57 + 8-9-90x

मैं Regex का उपयोग करने के साथ + या सभी नंबरों पर कब्जा करने की कोशिश कर रहा हूँ: उदाहरण के लिए एक्स बाद में। मैंने कोशिश की है

\[+-](\d+)[^x] 

लेकिन यह '-90x' से '-90' को भी कैप्चर करने लगता है।

+0

आप जानते हैं कि रेगेक्स खोज की जा रही स्ट्रिंग के लिए एक चरित्र पैटर्न से मेल खाने के लिए एक टेम्पलेट के रूप में कार्य करता है। मतलब है कि यह एक बूलियन समारोह है। मुझे नहीं पता कि "कैप्चर" से आपका क्या मतलब है। – yazanpro

+0

मैं चाहता हूं कि यह केवल एक्स के बिना संख्याएं पाएं ताकि मैं उन्हें बदल सकूं। – Netheous

+0

क्या यह '' -90'' पर कब्जा करता है या '-90x'' से' 90'' को ठीक करता है? यदि सबसे पहले, यह सामान्य प्रतीत नहीं होता है, यदि दूसरा है, तो शायद यह अंतिम 'x' को कैप्चर करता है और पहले नहीं, क्योंकि '6x' के बाद अन्य लोग संकेत देते हैं, इसलिए यह '^ x' से मेल खाता है। यह '9 0x' के लिए मेल नहीं खा सकता क्योंकि कोई अन्य वर्ण नहीं है। मुझे लगता है कि '[^ x] 'गलत है – Kaddath

उत्तर

8

सही Regex इस होगा:

@"[+-]((?>\d+))(?!x)" 

वैकल्पिक गैर नेट समाधान:

[+-](\d++)(?!x) 

@" 
[+-]   // Prefix non captured 
(    // Begin capturing group 
    (?>   // Begin atomic (non-backtracking) group - this part is essential 
     \d+  // One or more digits 
    )   // End atomic group 
)    // End capturing group 
(?!    // Begin negative lookahead 
    x   // 'x' literal 
)    // End negative lookahead 
" 

आप इसे here

+1

आप एक देवता हैं। – Netheous

+0

यह उत्तर बेहतर होगा यदि आपने समझाया * क्यों *, यानी ओपी ने अपनी अभिव्यक्ति में क्या गलत किया था। –

+0

यह बढ़िया है। 'परमाणु समूह' के लिए +1 जो मैं खोज रहा था। लेकिन मैं इस्तेमाल रेगेक्स के कुछ स्पष्टीकरण जोड़ दूंगा। –

0

मुख्य मुद्दा परीक्षण कर सकते हैं मूल regex के साथ है कि [ बच निकला है और एक शाब्दिक [ इस प्रकार मेल खाता है, और एक और समस्या (\d+)[^x] है जो 1+ अंकों को कैप्चर करती है और समूह 1 में कैप्चर की जाती है और फिर [^x] किसी भी चार से मेल खाता है लेकिन x। इसका मतलब है कि यह एक अंक से भी मेल खाता है (जैसा कि आपके मामले में, -90x के साथ, [+-] मैचों -, (\d+) मैचों और 9 और [^x] मैचों 0 से मेल खाता है)।

[+-](\d+)(?![\dx]) 

regex demo देखें:

एक अधिक उपयुक्त regex नकारात्मक अग्रदर्शी में x के साथ एक \d पैटर्न शामिल करने के लिए है।

पैटर्न विवरण:

  • [+-] - या तो + या -
  • (\d+) - एक नकारात्मक अग्रदर्शी कि मैच अगर 1+ अंक में विफल रहता है - समूह 1 1 या अधिक अंकों
  • (?![\dx]) मिलान कैप्चरिंग एक अंक या x के साथ पीछा किया जाता है।
संबंधित मुद्दे

 संबंधित मुद्दे