2012-08-05 14 views
8

से बच नहीं गया है, मैं स्ट्रिंग में अनचाहे कॉमा वर्णों से मेल खाने के लिए रेगेक्स बनाने की कोशिश कर रहा हूं।regex - मिलान चरित्र जो

मैं जिस नियम की तलाश कर रहा हूं वह है "एक कॉमा भी बैकस्लैश की संख्या से पहले नहीं है"।

टेस्ट मामलों:

True abc,abc 
False abc\,abc 
True abc\\,abc 
False abc\\\,abc 
True abc\\\\,abc 
False abc\\\\\,abc 

मैं एक नकारात्मक लुक-पीछे का उपयोग करने की कोशिश की: (?<!(\\+)), लेकिन अजगर मुझे error: look-behind requires fixed-width pattern देता है।

+0

कच्चे तार 'आर का उपयोग कर '...'' regex – JBernardo

+0

घोषित करने के लिए पहले उदाहरण सच क्यों है की कोशिश? यह भाग नहीं गया है। क्या आप सिर्फ स्लेश की संख्या गिन सकते हैं और यह निर्धारित कर सकते हैं कि यह भी है? – Ben

+0

@ जेबेर्नर्डो मैं कच्चे तारों का उपयोग कर रहा हूं। मैं ऐसे पात्रों की तलाश में हूं जो बच निकले नहीं हैं, स्पष्ट करने के लिए अद्यतन शीर्षक। – bcoughlan

उत्तर

18

इस regex का प्रयास करें: (?<!\\)(?:\\\\)*,

स्पष्टीकरण:

(?<!\\) Matches if the preceding character is not a backslash 
(?:\\\\)* Matches any number of occurrences of two backslashes 
,   Matches a comma 
+0

यह काम करता है। कहीं भी मुझे इसका स्पष्टीकरण मिल सकता है? – bcoughlan

+2

हालांकि एक मामूली समस्या यह है कि मैच समूह में पिछले सभी बैकस्लैश शामिल हैं। इसके लिए कोई कामकाज? – bcoughlan

+0

यह समस्या क्यों है? आप पहले से ही जानते हैं कि मैच का अंतिम चरित्र अल्पविराम है। – MRAB

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