Python正则表达式到findall行包含特定类型的文件名
我有一个文本文件。仅当文件名为.doc或.pdf类型的文件时,我希望获取包含文件名的行 比如说,Python正则表达式到findall行包含特定类型的文件名,python,regex,findall,Python,Regex,Findall,我有一个文本文件。仅当文件名为.doc或.pdf类型的文件时,我希望获取包含文件名的行 比如说, <TR><TD ALIGN="RIGHT">4.</TD> <TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="ABC.pdf"> On Complex Analytic Manifolds</a></TD> <TD ALIGN="LEFT" VALIGN="TOP
<TR><TD ALIGN="RIGHT">4.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="ABC.pdf"> On Complex Analytic Manifolds</a></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=72>L. Sam</TD>
</TR>
<TR><TD ALIGN="RIGHT">5.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="DEF.doc"> On the Geometric theory of Fields</a>*</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=72>G.K. Ram</TD>
</TR>
任何人都可以告诉我在re.findall()中定义模式的任何可伸缩方式吗?类似这样的内容:
>>> strs="""<TR><TD ALIGN="RIGHT">4.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="ABC.pdf"> On Complex Analytic Manifolds</a></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=72>L. Sam</TD>
</TR>
<TR><TD ALIGN="RIGHT">5.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="DEF.doc"> On the Geometric theory of Fields</a>*</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=72>G.K. Ram</TD>
</TR>"""
>>> [x for x in strs.splitlines() if re.search(r"[a-zA-Z0-9]+\.(pdf|doc)",x)]
['<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="ABC.pdf"> On Complex Analytic Manifolds</a></TD>',
'<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="DEF.doc"> On the Geometric theory of Fields</a>*</TD>'
]
>strs=“”4。
L.萨姆
5.
*
G.K.Ram
"""
>>>[x代表标准分割线中的x(),如果重新搜索(r“[a-zA-Z0-9]+\(pdf文档)”,x)]
['',
'*'
]
类似这样的内容:
>>> strs="""<TR><TD ALIGN="RIGHT">4.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="ABC.pdf"> On Complex Analytic Manifolds</a></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=72>L. Sam</TD>
</TR>
<TR><TD ALIGN="RIGHT">5.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="DEF.doc"> On the Geometric theory of Fields</a>*</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=72>G.K. Ram</TD>
</TR>"""
>>> [x for x in strs.splitlines() if re.search(r"[a-zA-Z0-9]+\.(pdf|doc)",x)]
['<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="ABC.pdf"> On Complex Analytic Manifolds</a></TD>',
'<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=50%><a href="DEF.doc"> On the Geometric theory of Fields</a>*</TD>'
]
>strs=“”4。
L.萨姆
5.
*
G.K.Ram
"""
>>>[x代表标准分割线中的x(),如果重新搜索(r“[a-zA-Z0-9]+\(pdf文档)”,x)]
['',
'*'
]
您可以使用此正则表达式:
(.*?<a\shref=[\"']\w+(?:\.doc|\.pdf)[\"']>.*)
(*)?
…L.山姆
...
5.
... *
…G.K.拉姆
... """
>>>关于findall(“(*?”,“*”)
您可以使用此正则表达式:
(.*?<a\shref=[\"']\w+(?:\.doc|\.pdf)[\"']>.*)
(*)?
…L.山姆
...
5.
... *
…G.K.拉姆
... """
>>>关于findall(“(*?”,“*”)
您可以同时使用BeautifulSoup
和re
import BeautifulSoup
import re
lines = soup.findAll('href', text = re.compile('your regex here'), attrs = {'class' : 'text'})
在html代码中使用
class
您的上级标题。您可以同时使用BeautifulSoup
和re
import BeautifulSoup
import re
lines = soup.findAll('href', text = re.compile('your regex here'), attrs = {'class' : 'text'})
在html代码中使用
class
你的上级标题。像href=“.+?\(doc | pdf)
它只返回['pdf',doc']。。但我需要整行内容。search
,而不是findall
法定警告:。(不过,这个简单的例子不应该有问题。)您是否建议循环搜索每一行并搜索其中的每一行???findall实际上是以一种有效的方式进行的,只要我们提供了正确的模式…比如href=“.+?\(doc | pdf)
它的返回['pdf',doc']只是……但我需要整行……用search
试试,而不是findall
法定警告:。(不过,这个简单的例子不应该有问题。)你是不是建议我们在这些行中循环并搜索它们中的每一行???findall实际上是以一种有效的方式进行的,只要我们给它提供了正确的模式…实际上我不想使用字符串函数…我只需要使用正则表达式…实际上我不想使用字符串函数…我只需要使用正则表达式…但我不需要我把整条线…从到但是我需要整条线…从到