2017-12-08 2 views
-3

Ich suche nach einem regulären Ausdruck, den ich im Text finde, die Worte "ata de audiência" ODER "termo de audiência", und finde "inconcilia" UND "reclamante" AND "reclamada “und finde nicht das Wort‚sentença‘Regex mit dem AND NOT Operator

if(re.search(r'ata de audiência' or r'termo de audiência') and r'inconcilia' and r'reclamada' and r'reclamante' and not r'sentença', content.read())): 
      key_content = True 

ich habe versucht, es so zu tun .. kann ich die Worte finden, aber wenn ich die Verwendung‚AND NOT‘Operator, wird der reguläre Ausdruck nicht funktioniert

ps: es gibt Worte auf portugiesisch

+0

ein minimales Beispiel erstellen Sie bitte die leicht reproduzierbar ist! – mrCarnivore

Antwort

0

Sie können einen regulären Ausdruck dafür brauchen.

text = content.read() 

if ('ata de audiência' in text or 'termo de audiência' in text) \ 
    and 'inconcilia' in text and 'reclamada' in text \ 
    and 'reclamante' in text and not 'sentença' in text: 
     key_content = True 
+0

> Wenn Sie nicht-ASCII-Zeichen verwenden, müssen Sie Ihre Zeichen mit u 'voranstellen. | Das gilt nur für Python 2; Die Frage ist mit Python 3.x markiert. –

+0

Bekannt! Ich habe die Antwort bearbeitet – romifz

0

So funktioniert Regex nicht. Ich würde vorschlagen, dass Sie mehr darüber lesen, wenn Sie es wirklich verwenden möchten.

Für Ihre Bedürfnisse wäre das Schlüsselwort in geeigneter. Es gibt True zurück, wenn der Teilstring in der Zeichenfolge ist, oder False, wenn dies nicht der Fall ist. Sie könnten Kette solche mit and und or Befehle, oder man könnte so etwas tun:

contents_text = content.read() 
if any(word in contents_text for word in ['ata de audiência', 'termo de audiência']) 
    and all(word in context_text for word in ['inconcilia', 'reclamada', 'reclamante']) 
    and 'sentença' not in context_text: 
     key_content = True 
1

Der Code in der Frage ist nicht genug vervollständigen im Detail zu kommentieren, aber die erste Ausgabe ist Missverständnis, das Argument Sie bestanden haben zu re.search().

Der folgende Code ist ein boolescher Ausdruck:

r'ata de audiência' or r'termo de audiência' 

Python interpretiert dies als „verwenden, um die erste Zeichenfolge, wenn nicht Keine oder nicht leer ist, oder aber die zweite“.

Auf der Konsole:

>>> r'ata de audiência' or r'termo de audiência' 
'ata de audiência' 

Ebenfalls mit and und not:

>>> r'inconcilia' and r'reclamada' 
'reclamada' 

>>> r'inconcilia' and r'reclamada' and r'reclamante' and not r'sentença' 
False 

Sie benötigen ein kleines eigenständiges Beispiel zu liefern. Oft bereitet Ihnen die Vorbereitung dieses Beispiels einen langen Weg, um das Problem zu lösen.

0

Versuchen Sie folgendes:

if(
0 <= re.search('((ata de audiência){1}||(termo de audiência){1})&&(inconcilia){1}&&(reclamada){1}&&(reclamante){1}&&(sentença){0}', content.read()) 
){ 
key_content = True 
}