2017-05-15 1 views
0

Ich möchte Nettogewinn aus der Aussage, mit "Nettogewinn" als nicht erfassender Teil extrahieren. Nicht sicher, wie es zu tun (kann ein nicht Capturing hinter sehen sein?)Non Capturing Look hinter in Regex Python

zB

'Business-Venture von Nettogewinn von 23,5 Mio. US-Dollar'

erforderlich o/p:

23,5 Mio.

angewendet, um die f ach regex:

(net|nt)\s*\.?\s*(profit|earnings)\s*\.?\s*\d+\.?\d*\.?\s*(?:lakh|crore|million) 

Aber es ist

[('net', 'Gewinn')]

als Ausgang zu geben.

+0

Ja, Sie haben Gruppen, die erfassen. Haben Sie sich die ['re 'Moduldokumentation] (https://docs.python.org/3/library/re.html#regular-expression-syntax) angeschaut und finden Sie die Lookbehind-Assertionssyntax (' (? <=. ..) ') noch? IIRC kann man in einer Behauptung wie dieser jedoch keine Muster mit variabler Breite ('*') verwenden. Vielleicht wollten Sie nur die Gruppen * non-captaining * (wie die Gruppe, die Sie nachstellen)? –

+1

Sie können ['ne? T \ s * \.? \ S * (?: Gewinn | Gewinn) \ s * (\.? \ S * \ d + \.? \ D * \.? \ S * (?: lakh | crore | million)) '] (https://regex101.com/r/7yw1pn/1) – anubhava

+0

Aditya, nicht [diese Antwort] (http://stackoverflow.com/a/43973389/3832970) Arbeite für dich? –

Antwort

2

Versuchen mit unter regex Sie das Ergebnis in der Gruppe 1 erhalten wird,

(?:ne?t\s(?:profit|earning)\s)([\d\.]+\s(?:million|laks|crore)) 

DEMO

1

Sie können (?:) für Nicht-Capture verwenden

s = 'business venture of net profit 23.5 million dollars' 
re.findall(r'(?:net|nt)\s*\.?\s*(?:profit|earnings)\s*\.?\s*(\d+\.?\d*)\.?\s*(lakh|crore|million)',s) 
[('23.5', 'million')] 
1

Sie nicht die digitgroup erfassen haben. Darüber hinaus müssen Sie eine Nicht-Erfassung Gruppe mit dem 'Netto' und 'Gewinn'

so sollte diese Arbeit:

bearbeiten million..etc

import re 
s = 'business venture of net profit 23.5 million dollars' 
re.findall(r'(?:net|nt)\s*\.?\s*(?:profit|earnings)\s*\.?\s*(\d+\.?\d*)\.?\s*(lakh|crore|million)', s) 
# output: ['23.5', 'million'] 

Beispiel bei erfassen: https://regex101.com/r/EXCzeV/2

+0

wie "Millionen" in der Ausgabe enthalten? –

+0

Entfernen Sie die nicht erfassende Gruppe, die entspricht: '(lakh | core | million)' – Ludisposed

Verwandte Themen