Wyszukiwanie wyrażeń regularnych dla słów kluczowych w ciągu


Próbuję nauczyć się używać wyrażeń regularnych, ale mam pytanie. Powiedzmy, że mam ciąg
line = 'Cow Apple think Woof`

Chcę sprawdzić, czy
line
ma co najmniej dwa słowa zaczynające się od wielkich liter (co oczywiście ma miejsce). W Pythonie próbowałem wykonać następujące czynności
import re
test = re.search(r'(\b[A-Z]([a-z])*\b){2,}',line)
print(bool(test))

ale to drukuje
False
. Jeśli zamiast tego to zrobię
test = re.search(r'(\b[A-Z]([a-z])*\b)',line)

Uważam, że
print (test.group (1))
to
Cow
, ale
print (test.group (2))
to
w
, ostatnia litera pierwszego dopasowania (w
test.group
). żadnych innych elementów
Czy są jakieś sugestie dotyczące zdefiniowania tego problemu i/lub najlepszego podejścia do problemu jako całości?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ostatnia litera dopasowania znajduje się w grupie ze względu na nawiasy wewnętrzne. Po prostu je upuść i wszystko będzie dobrze.
>>> t = re.findall('([A-Z][a-z]+)', line)
>>> t
['Cow', 'Apple', 'Woof']
>>> t = re.findall('([A-Z]([a-z])+)', line)
>>> t
[('Cow', 'w'), ('Apple', 'e'), ('Woof', 'f')]

Liczba haseł to oczywiście
len (t)
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Używam funkcji
findall
, aby znaleźć wszystkie wystąpienia pasujące do wyrażenia regularnego. Użyj
len
, aby zobaczyć, ile jest dopasowań. W takim przypadku zwraca
3
. Możesz sprawdzić, czy długość jest większa niż 2 i zwrócić
True
lub
False
.
import reline = 'Cow Apple think Woof'test = re.findall(r'(\b[A-Z]([a-z])*\b)',line)
print(len(test) >= 2)

Jeśli chcesz używać tylko wyrażenia regularnego, możesz wyszukać słowo kluczowe, po którym następuje kilka znaków między nimi i inne słowo kluczowe.
test = re.search(r'(\b[A-Z][a-z]*\b)(.*)(\b[A-Z][a-z]*\b)',line)
print(bool(test))

  • (\ b [A-Z] [a-z] * \ b)
    - dopasowuje słowo z wielką literą
  • (. *)
    - dopasowuje 0 lub więcej znaków
  • (\ b [A-Z] [a-z] * \ b)
    - znajduje drugie słowo kluczowe

Ta metoda nie jest tak dynamiczna, ponieważ nie będzie działać podczas próby dopasowania 3 słów kluczowych.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

import resent = "His email is abc@some.com, however his wife uses xyz@gmail.com"x = re.findall('[A-Za-z]+@[A-Za-z\.]+', sent)print(x)

Jeśli na końcu identyfikatora e-mail (abc @ some, com.) Znajduje się kropka, zostanie on zwrócony na końcu adresu e-mail. Jednak można to omówić osobno.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się