Regex Instr की वजह से मैचों को अस्वीकार कर रहा है

रेगेक्स के साथ "instring" प्रकार फ़ंक्शन करने का सबसे आसान तरीका क्या है? उदाहरण के लिए, : जैसे एकल वर्ण की उपस्थिति के कारण मैं पूरी स्ट्रिंग को कैसे अस्वीकार कर सकता हूं? उदाहरण के लिए:

  • this - okay
  • there:is - not okay because of :

अधिक व्यावहारिक रूप से, मैं निम्न स्ट्रिंग से कैसे मिलान कर सकता हूं:

//foo/bar/baz[1]/ns:foo2/@attr/text()

Xpath पर किसी नोड परीक्षण के लिए जिसमें नामस्थान शामिल नहीं है?

(/)?(/)([^:/]+) 

नोड परीक्षणों से मेल खाएगा लेकिन इसमें नामस्थान उपसर्ग शामिल है जो इसे दोषपूर्ण बनाता है।

0
ro fr bn

5 उत्तर

आप चाहते हैं \ w जो एक "शब्द" चरित्र है। javadocs से, यह [a-zA-Z_0-9] के रूप में परिभाषित किया गया है, इसलिए यदि आप अंडरस्कोर नहीं चाहते हैं, तो यह काम नहीं कर सकता ....

0
जोड़ा

मैच पर:? मुझे लगता है कि सवाल पर्याप्त स्पष्ट नहीं है, क्योंकि जवाब इतना स्पष्ट है:

if(Regex.Match(":", input))//reject
0
जोड़ा

मैं रेगेक्स सिंटैक्स को बहुत अच्छी तरह से नहीं जानता लेकिन आप ऐसा नहीं कर सकते:

<�कोड> [कोई अल्फा न्यूमेरिक] \ *: [कोई अल्फान्यूमेरिक] \ *

मुझे लगता है कि ऐसा कुछ काम नहीं करना चाहिए?

0
जोड़ा

हाँ, मेरा सवाल बहुत स्पष्ट नहीं था। यहां एक समाधान है लेकिन रेगेक्स के साथ एक एकल पास के बजाय, मैं विभाजित का उपयोग करता हूं और पुनरावृत्ति करता हूं। यह भी काम करता है लेकिन सुरुचिपूर्ण नहीं है:

string xpath = "//foo/bar/baz[1]/ns:foo2/@attr/text()";
string[] nodetests = xpath.Split( new char[] { '/' } );
for (int i = 0; i < nodetests.Length; i++) 
{
    if (nodetests[i].Length > 0 && Regex.IsMatch( nodetests[i], @"^(\w|\[|\])+$" ))
    {
       //does not have a ":", we can manipulate it.
    }
}

xpath = String.Join( "/", nodetests );
0
जोड़ा

मुझे अभी भी यकीन नहीं है कि क्या आप सिर्फ यह जानना चाहते हैं कि एक्सपैथ में नेमस्पेस है या आप नामस्थान के संदर्भों को हटाना चाहते हैं या नहीं। तो यहां कुछ नमूना कोड (सी # में) है जो दोनों करता है।

class Program
{
    static void Main(string[] args)
    {
        string withNamespace = @"//foo/ns2:bar/baz[1]/ns:foo2/@attr/text()";
        string withoutNamespace = @"//foo/bar/baz[1]/foo2/@attr/text()";

        ShowStuff(withNamespace);
        ShowStuff(withoutNamespace);
    }

    static void ShowStuff(string input)
    {
        Console.WriteLine("'{0}' does {1}contain namespaces", input, ContainsNamespace(input) ? "" : "not ");
        Console.WriteLine("'{0}' without namespaces is '{1}'", input, StripNamespaces(input));
    }

    static bool ContainsNamespace(string input)
    {
       //a namspace must start with a character, but can have characters and numbers
       //from that point on.
        return Regex.IsMatch(input, @"/?\w[\w\d]+:\w[\w\d]+/?");
    }

    static string StripNamespaces(string input)
    {
        return Regex.Replace(input, @"(/?)\w[\w\d]+:(\w[\w\d]+)(/?)", "$1$2$3");
    }
}

उम्मीद है की वो मदद करदे! सौभाग्य।

0
जोड़ा