2016-05-10 5 views
0

Ich erstelle ein Werkzeug für Autodesk Inventor, das mit einer Ausdruckszeichenfolge arbeitet.vb.net bekomme Text zwischen <> Klammern

=Pipe Ø<Pipe_OD> x <Pipe_t> - lg. <Pipe_length>mm 

Der Text zwischen < ...> kann fast alles sein, es ist das, was der Benutzer als Eingabe gemacht, so dass diese Werte nicht festgelegt sind. Und die Zahl der < ...> in der Zeichenkette variieren von 0 bis 5

Was Ich mag würde für diesen String als Ergebnis haben folgt:

A umgewandelt String, wo die Werte zwischen den < ...> werden durch eine Zahl mit einem aufsteigenden Wert ersetzt.

=Pipe Ø<1> x <2> - lg. <3>mm 

Und ein string() wo die Werte, die durch die Zahlen ersetzt werden (siehe oben) in gespeichert sind.

fand ich eine Methode, die jetzt für Strings mit 1 <...> im String arbeiten kann, sondern dass die Menge ist variabel Ich habe keine Ahnung, wie ich das machen kann.

Link to method

+1

Sie meinen, Sie wollen eine Zeichenfolge wie' "" 't o geändert werden in "<0><1><2>" 'und dann eine Sammlung von Strings wo' myVals (0) = "pipe_val1" ',' myVals (1) = "pipe_val2" 'und' myVals (2) = "pipe_val3 "'? – p3tch

+0

Ja, einfach so! –

+0

Haben Sie es mit Regex versucht? Kannst du zeigen, was du getan hast, um 1 Paar zu haben? –

Antwort

1

Edit: Neue Antwort mit regulären Ausdrücken (viel besser, immer noch Probleme haben, mit zusätzlichen < und> obwohl)

Dim s As String = "abc <pipe_val1> 123 <pipe_val2> &*(<pipe_val3>k" 
    Dim myValues As New List(Of String) 

    Dim matches As MatchCollection = Regex.Matches(s, "<(.|\n)*?>", RegexOptions.IgnoreCase) 

    Dim totalDiff As Integer = 0 
    Dim idx As Integer = 0 

    For Each ma As Match In matches 
     Dim realIndex = ma.Index - totalDiff 
     s = s.Remove(realIndex, ma.Length).Insert(realIndex, "<" & idx.ToString & ">") 
     idx += 1 
     totalDiff += ma.Length - (idx.ToString.Count + 2) 
     myValues.Add(ma.Value.Trim({"<"c, ">"c})) 
    Next 

"abc <pipe_val1> 123 <pipe_val2> &*(<pipe_val3>" wird "abc <0> 123 <1> &*(<2>" und myValues wird „pipe_val1 enthalten geändert werden "," pipe_val2 "und" pipe_val3 "

+0

Hallo, danke für diesen Regex-Code, es ist gut, aber ich bin ziemlich verwirrt durch die Zeichenfolge einfügen und Stück. Wäre es nicht einfacher, die Zeichenfolge zu ersetzen, anstatt sie zu entfernen und einzufügen? 's.Replace (m.Value," <" & idx & "> ")'? –

+0

'.Replace' könnte Probleme verursachen, da alle Vorkommen der Teilzeichenfolge ersetzt werden. Wenn also ein Wert "a" ist, wird jedes "a" in der gesamten Zeichenfolge ersetzt. So entschied ich mich, sicher zu sein und zum Index zu gehen, dass das Match anfängt, entfernen Sie die ganze Sache, dann fügen Sie die Zahl zurück im gleichen Index hinzu – p3tch

+0

Richtig! Daran habe ich nicht gedacht. –