Sprawdzenie, czy string [nie] jest w danej linii

0

Mam plik z logami i kazda linia zawiera ktorys z tych stringow
"PROTO=TCP"
"PROTO=UDP"
"PROTO=ICMP"

Jak sprawdzic w jednym ifie, czy pierwszy, lub drugi string jest w danej linii?
Sprawdzenie pojedynczego stringu dziala
if "PROTO=TCP" in line:
ale jednoczesne ssprawdzenie dwoch stringow, to juz nie wiem. Probowalem wielu roznych sposobow, ale nie wychodzi.
if ("PROTO=TCP" or "PROTO=UDP") in line: - probowaalem uzywac pionowej kresji, nawiasow kwadratowych i nic nie dziala

Drugi problem, to jak sprawdzic, czy danego stringu nie ma w linii
if "PROTO=ICMP" not in line: - nie dziala

3

Jak sprawdzic w jednym ifie, czy pierwszy, lub drugi string jest w danej linii?

Jak masz tylko dwa warunki, to robisz or:

>>> line = "PROTO=TCP;PROTO=UDP" 
>>> "PROTO=TCP" in line or "PROTO=UDP" in line
True

Jak masz więcej, to stosuje się any:

>>> line = "PROTO=TCP;PROTO=UDP" 
>>> any(s in line for s in ("PROTO=TCP", "PROTO=UDP"))
True

W kodzie ("PROTO=TCP" or "PROTO=UDP") in line najpierw wywołuje się to co nawiasach, ponieważ string "PROTO=TCP" nie jest pusty to jest prawdziwy, zatem jest zwracany:

>>> ("PROTO=TCP" or "PROTO=UDP")
'PROTO=TCP'

Więc całość sprowadza się do "PROTO=TCP" in line.

Drugi problem, to jak sprawdzic, czy danego stringu nie ma w linii
if "PROTO=ICMP" not in line: - nie dziala

A powinno, bo tak się właśnie to sprawdza

>>> "PROTO=ICMP" not in "xxxx"
True
>>> "PROTO=ICMP" not in "PROTO=ICMP; PROTO=TCP"
False
>>> "PROTO=ICMP" not in "PROTO=ICMP"
False
>>> "PROTO=ICMP" not in "PROTO=TCP"
True

1 użytkowników online, w tym zalogowanych: 0, gości: 1