2017-04-03 4 views
2

wenn ich negative Vorschau auf dieser Zeichenfolgepython regex negative Vorschau

1pt 22px 3em 4px 

wie diese

/\d+(?!px)/g 

ich dieses Ergebnis zu erhalten verwenden

(1, 2, 3) 

und ich möchte alle die 22px zu verworfen werden, aber ich weiß nicht, wie soll ich das tun

+0

Wenn die Buchstaben die ganze Zeit da sind, verwenden Sie einfach '\ d + (?! px) [a-z] +' – sln

Antwort

3

eine Ziffer Muster auf den Look-Ahead hinzufügen:

\d+(?!\d|px) 

die

Auf diese Weise regex demo Sehen Sie, Sie werden nicht zulassen, sind eine Ziffer entsprechen nach 1 oder mehr Stellen bereits abgestimmt.

Eine andere Möglichkeit ist eine Atomgruppe, Arbeit um wie

(?=(\d+))\1(?!px) 

Siehe regex demo zu verwenden. Hier erfasst (?=(\d+)) eine oder mehrere Ziffern in Gruppe 1 und die \1 Rückreferenz wird diese Ziffern konsumieren, wodurch ein Zurückverfolgen in das \d+ Muster verhindert wird. Die (?!px) wird die Übereinstimmung fehlschlagen, wenn die Ziffern mit px verfolgt werden und nicht zurück zum Abrufen 2 abgerufen werden können.

Beide Lösungen funktionieren mit re.findall.

+0

Siehe [Python-Demo] (http://ideone.com/95npxQ). Denken Sie daran, bei der Deklaration von Regex-Mustern rohe String-Literale zu verwenden, wenn ('r'pattern''). –

Verwandte Themen