正则表达式 - 跳过一系列变量匹配

时间:2018-03-27 12:22:52

标签: c# regex

<element>
<adresse>0x50</adresse>
<typ>byt</typ>
<faktor>1</faktor>
<einheit/>
<kommentar>1  (153.00521703-PROTO)</kommentar>
<range/>
<wert>49</wert>
</element>
<element>
<adresse>0x51</adresse>
<typ>byt</typ>
<faktor>1</faktor>
<einheit/>
<kommentar>5</kommentar>
<range/>
<wert>53</wert>
</element>
<element>
<adresse>0x52</adresse>
<typ>byt</typ>
<faktor>1</faktor>
<einheit/>
<kommentar>3</kommentar>
<range/>
<wert>51</wert>
</element>
<element>
<adresse>0x53</adresse>
<typ>byt</typ>
<faktor>1</faktor>
<einheit/>
<kommentar>.</kommentar>
<range/>
<wert>46</wert>
</element>
<element>
<adresse>0x54</adresse>
<typ>byt</typ>
<faktor>1</faktor>
<einheit/>
<kommentar>0</kommentar>
<range/>
<wert>48</wert>
</element>
<element>
<adresse>0x55</adresse>
<typ>byt</typ>
<faktor>1</faktor>
<einheit/>
<kommentar>0</kommentar>
<range/>
<wert>48</wert>
</element>
<element>
<adresse>0x56</adresse>
<typ>byt</typ>
<faktor>1</faktor>
<einheit/>
<kommentar>5</kommentar>
<range/>
<wert>53</wert>
</element>
<element>
<adresse>0x57</adresse>
<typ>byt</typ>
<faktor>1</faktor>
<einheit/>
<kommentar>2</kommentar>
<range/>
<wert>50</wert>
</element>​

我想在多个Textfile中搜索特定值。

我写了一个简单的Regex这样的东西,它找到了单词typ&gt;之间的任何东西。和\ typ&gt;

Regex RegTyp = new Regex(@"typ>(.*?)/typ>");

现在每当我找到“bit”这个词时,它应该会在textfile Regex中找到你可以找到的NEXT八个匹配项{/ 1}}

Regex RegValue = new Regex(@"value>(.*?)/value>")

在单词value&gt;之间找到任何内容和\ value&gt;

我正在尝试将其编程为:

if (a.Equals("bit"))

//a defines my match

{Regex RegValue = new Regex(@"value>(.*?)/value>");

for(int i =0;i<8;i++)
{...

问题是我的Regex RegValue现在匹配完整的文本而不是NEXT 8匹配后我将“bit”与RegTyp匹配

任何帮助都很有用 谢谢

1 个答案:

答案 0 :(得分:0)

尝试以下xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {

            new Element(FILENAME);
        }
    }
    public class Element
    {
        public static List<Element> elements = new List<Element>();
        public int address  { get; set;}
        public string typ  { get; set;}
        public int faktor  { get; set;}
        public string einheit  { get; set;}
        public string kommentar  { get; set;}
        public string range  { get; set;}
        public int wert  { get; set;}

        public Element() { }
        public Element(string filename)
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ConformanceLevel = ConformanceLevel.Fragment;
            XmlReader reader = XmlReader.Create(filename, settings);

            while (!reader.EOF)
            {
                if (reader.Name != "element")
                {
                    reader.ReadToFollowing("element");
                }
                if (!reader.EOF)
                {
                    XElement element = (XElement)XElement.ReadFrom(reader);

                    Element newElement = new Element();
                    Element.elements.Add(newElement);

                    newElement.address = int.Parse(((string)element.Element("adresse")).Substring(2), System.Globalization.NumberStyles.HexNumber);
                    newElement.typ = (string)element.Element("typ");
                    newElement.faktor = (int)element.Element("faktor");
                    newElement.einheit = (string)element.Element("einheit");
                    newElement.kommentar = (string)element.Element("kommentar");
                    newElement.range = (string)element.Element("range");
                    newElement.wert = (int)element.Element("wert");

                }
            }
        }
    }

}