2017-08-09 5 views
1

Zum ersten Mal Posting, bitte die Formatierung vergeben. Nicht wirklich ein Programmierer, ich arbeite in C# mit den Revit und AutoCAD APi's. Wichtig zu beachten, da die Revit-API etwas unordentlich ist. Daher kann derselbe Code zu unterschiedlichen Ergebnissen in einer anderen API führen. Also habe ich drei grundlegende String-Muster, wo ich bestimmte Zahlen zurückgeben möchte, je nachdem, was ihr Präfix & Suffix. Sie könnten von anderem Text umgeben sein als dem, was ich zeige, und die tatsächlichen Zahlen und Positionen in der Zeichenfolge können variieren.RegexMuster Zahlen übereinstimmen, unter bestimmten Bedingungen

String 1: (12) # 4x2'-0 @ 6 EF

String 2: (12) # 4 @ 6 EF

String 3: STAGGER 2'- 0, SPCG AT 6 AT 12 SLAB

Der Code ich verwende:

if (LengthAsString.IsMatch(remarkdata) == true) 
{ 
    Regex remarklength = new Regex(@"isnertRegexPatternhere"); 
    if (remarklength.IsMatch(remarkdata)) 
    { 
     remarkdata = remarklength.Replace(remarkdata, "${0}\u0022"); 
    } 
} 

Remarkdaten sind die Strings von oben, und nach jeder Nummernübereinstimmung werden Zollmarkierungen hinzugefügt.

Die Muster ive getestet und ihre Erträge:

        String 1 String 2 String 3 
    \d+(?!['-]|([(\d+)]))  0,6  4,6  0,6,12 
    (?<![#])\d+     12,2,0,6 12,6  2,9,6,12 
    \d+(?= @)|(?<[email protected])\d+   0,6  6   no matches 

 expected results:   0,6  6   0,6,12 

so im der Nähe, aber keine Zigarre. Gedanken?

Doppel Edit: Suche nach den Zahlen, die von # nicht vorangehen, noch zwischen(). Ignoriere @ und x, sie können da sein oder nicht.

+0

Ihre Anforderungen sind nicht eindeutig. Bitte formulieren Sie sie mündlich. –

+0

bearbeitet. Ich denke, dass klärt es auf? – Cereston

+0

Zuerst kam ich mit '(?

Antwort

0

Sie scheinen für

(?<!#)\d+(?!.*(?:['-]|[#x]\d)) 

Siehe regex demo

Einzelheiten

  • (?<!#) zu suchen - eine negative Lookbehind, die das Spiel nicht, wenn es eine # sofort das ist links vom aktuellen Standort
  • \d+-1 oder mehrere Ziffern (oder [0-9]+ nur ASCII Ziffern Spiel)
  • (?!.*(?:['-]|[#x]\d)) - ein negativer Look-Ahead, die das Spiel einmal versagt es irgendwelche 0+ Zeichen außer Newline (.*), gefolgt mit ', - oder #/x gefolgt von einer Ziffer unmittelbar rechts vom aktuellen Standort.

Beachten Sie, dass für den Fall, die Saiten immer ausgeglichen haben nicht verschachtelte Klammern, und Sie können (123) Teil nach # oder x1 haben, können Sie auch [^()]*\) in die Look-Ahead-

(?<!#)\d+(?!.*(?:['-]|[#x]\d)|[^()]*\)) 

zu vermeiden hinzufügen möchten übereinstimmende Ziffern in den Klammern.

Siehe another .NET demo.

Verwandte Themen