Nie mogę wykorzystywać wyrażeń regularnych tak, jak chcę.

Kiedy uruchomię ten kod, otrzymuję tekst poniżej

for paragraph in soup.find_all('p'):
        print(paragraph.find_all(text =re.compile(":*\w*")))

Tekst, który otrzymuję

Continuing our series of surfacing 2016 stinkers, here are the 25 Russell 2000 stocks that imploded in 2016. Further down, you'll find the 25 worst stocks excluding pharma. Ophthotech (NASDAQ:OPHT) -94% Galena Biopharma (NASDAQ:GALE) -93% Cempra (NASDAQ:CEMP) -91% Toaki Pharma (NASDAQ:TKAI) -89% Anthera Pharma (NASDAQ:ANTH) -86% Adeptus Health (NYSE:ADPT) -86% CytRx (NASDAQ:CYTR) -86% Novavax (NASDAQ:NVAX) -85%

Z których po prostu chcą wyodrębnić tablery, więc idealne wyjście to:

OPHT
GALE
CEMP
TKAI

I tak dalej.

Próbowałem odmian tych kodów:

for paragraph in soup.find_all('p'):
    print(paragraph.find_all(text =re.compile('(:\w+)')))
for paragraph in soup.find_all('p'):
    print(paragraph.find_all(text =re.compile("(:*\w*)")))
for paragraph in soup.find_all('p'):
    print(paragraph.find_all(text =re.compile('(:)?\w+')))

Ale przez większość czasu kończę się z wyjściem

`['Continuing our ', 'series', " of surfacing 2016 stinkers, here are the 25 Russell 2000 stocks that imploded in 2016. Further down, you'll find the 25 worst stocks excluding pharma."]
['Ophthotech (NASDAQ:', 'OPHT', ') -94%']
['Galena Biopharma (NASDAQ:', 'GALE', ') -93%']
['Cempra (NASDAQ:', 'CEMP', ') -91%']
['Toaki Pharma (NASDAQ:', 'TKAI', ') -89%']
['Anthera Pharma (NASDAQ:', 'ANTH', ') -86%']
['Adeptus Health (NYSE:', 'ADPT', ') -86%']
['CytRx (NASDAQ:', 'CYTR', ') -86%']
['Novavax (NASDAQ:', 'NVAX', ') -85%']`

Nie wiem, co robię źle.

Dziękuję Ci.

0
Moondra 17 luty 2017, 05:03

2 odpowiedzi

Najlepsza odpowiedź

Możesz spróbować tego:

import re

text = """Continuing our series of surfacing 2016 stinkers, here are the 25 Russell 2000 stocks that imploded in 2016. Further down, you'll find the 25 worst stocks excluding pharma.
Ophthotech (NASDAQ:OPHT) -94%
Galena Biopharma (NASDAQ:GALE) -93%
Cempra (NASDAQ:CEMP) -91%
Toaki Pharma (NASDAQ:TKAI) -89%
Anthera Pharma (NASDAQ:ANTH) -86%
Adeptus Health (NYSE:ADPT) -86%
CytRx (NASDAQ:CYTR) -86%
Novavax (NASDAQ:NVAX) -85%"""

#Its better to compile a regex outside a loop
pattern = re.compile(r':(\w+)\)')

results = pattern.findall(text)

for items in results:
    print(items)
2
Ettore Rizza 17 luty 2017, 08:26

To może być dobry kierunek

re.search(r':(\w+)\)', paragraph.text).group(1)

Spróbuj dodać r '' przed wzorem

1
josifoski 19 luty 2017, 05:24