Regex 带漂亮汤的正则表达式,提取';之后的所有字母:';

Regex 带漂亮汤的正则表达式,提取';之后的所有字母:';,regex,python-3.x,beautifulsoup,Regex,Python 3.x,Beautifulsoup,我似乎不能按我想要的方式使用正则表达式 当我运行这段代码时,我得到下面的文本 for paragraph in soup.find_all('p'): print(paragraph.find_all(text =re.compile(":*\w*"))) 我得到的文本是 继续我们的2016年臭虫系列,以下是2016年内爆的25只罗素2000股票。进一步下跌,你会发现25只最差的股票,不包括制药。 Ophthotech(纳斯达克股票代码:OPHT)-94% 方铅矿生物制药(纳斯

我似乎不能按我想要的方式使用正则表达式

当我运行这段代码时,我得到下面的文本

for paragraph in soup.find_all('p'):
        print(paragraph.find_all(text =re.compile(":*\w*")))
我得到的文本是

继续我们的2016年臭虫系列,以下是2016年内爆的25只罗素2000股票。进一步下跌,你会发现25只最差的股票,不包括制药。
Ophthotech(纳斯达克股票代码:OPHT)-94%
方铅矿生物制药(纳斯达克股票代码:GALE)-93%
Cempra(纳斯达克股票代码:CEMP)-91%
Toaki制药公司(纳斯达克股票代码:TKAI)-89%
Antera制药(纳斯达克股票代码:ANTH)-86%
Adeptus Health(纽约证券交易所:ADPT)-86%
CytRx(纳斯达克股票代码:CYTR)-86%
Novavax(纳斯达克股票代码:NVAX)-85%

其中,我们只想提取股票行情,因此理想的输出是:

OPHT
GALE
CEMP
TKAI
等等

我尝试了这些代码的变体:

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+')))
但大多数时候,我的结果都是

`['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%']`
不知道我做错了什么


多谢各位

这可能是一个好的方向

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

尝试在模式之前添加r'',这可能是一个好的方向

re.search(r':(\w+)\)', paragraph.text).group(1)
尝试在模式之前添加r“”

您可以尝试以下操作:

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)
你可以试试这个:

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)

您试图解析的原始文本是什么样子的?您试图解析的原始文本是什么样子的?谢谢。利用你的建议,我为《汤》中的段落想出了这个cde
。find_all('p'):re.search(r':(\w+)\),paragration.text)
我得到了以下输出(似乎是正确的),但不确定如何打印它
是的,你是对的,请参阅更新的unswer。简言之,第(1)组将向您致谢。利用你的建议,我为《汤》中的段落想出了这个cde
。find_all('p'):re.search(r':(\w+)\),paragration.text)
我得到了以下输出(似乎是正确的),但不确定如何打印它
是的,你是对的,请参阅更新的unswer。简言之,组(1)将为您提供所需的字符串。我仍然需要使用循环从soup.find_all('p')获取文本,但此代码似乎有效<代码>用于soup.find_all('p'):打印(pattern.findall(paragration.text))。我仍然不明白为什么需要将
r
放在正则表达式前面。谢谢。前缀
r
表示“原始字符串”。没有它,您应该双重转义元字符。例如,
r“\d+”
相当于
“\\d+”
我仍然需要使用循环从soup.find_all('p')获取文本,但此代码似乎有效<代码>用于soup.find_all('p'):打印(pattern.findall(paragration.text))。我仍然不明白为什么需要将
r
放在正则表达式前面。谢谢。前缀
r
表示“原始字符串”。没有它,您应该双重转义元字符。例如,
r“\d+”
相当于
“\\d+”