[英]How to exclude string of patten in regex search
如何使用正则表达式在html字符串中搜索单词,但忽略html标记中的单词。 例如<a href="foo">foo</a>
,应忽略第一个foo
,第二个foo
是要搜索的模式。
将BeautifulSoup
与正则表达式结合使用的示例:
from bs4 import BeautifulSoup
import re
string = '''
<a class='fooo123'>foo on its own</a>
<a class='123foo'>only foo</a>
'''
soup = BeautifulSoup(string, "lxml")
foo_links = soup.find_all(text=re.compile("^foo"))
print(foo_links)
# ['foo on its own']
要使用eg mark
包装找到的链接,可以执行以下操作:
from bs4 import BeautifulSoup
import re
string = '''
<a class='fooo123'>foo on its own</a>
<a class='123foo'>only foo</a>
'''
soup = BeautifulSoup(string, "lxml")
foo_links = soup.findAll('a', text=re.compile("^foo"))
for a in foo_links:
mark = soup.new_tag('mark')
a.wrap(mark)
print(soup.prettify())
以及强制性的Tony the Pony链接...
该程序应该能够找到标签之间的所有内容。
import re
str = '''<h3>
<a href="//stackexchange.com/users/838793061/?accounts">yourcommunities</a>
</h3>
<a href="#" id="edit-pinned-sites">edit</a>
<a href="#" id="cancel-pinned-sites"style="display:none;">cancel</a>'''
pattern = re.compile(r'>([^<>]+)<')
all = re.findall(pattern, str)
for i in all:
print(i)
如果内容包含空格怎么办?
我提出了下一个正则表达式,该正则表达式也从答案中删除了空格:
#### With spaces:
line = '<a href="foo"> foo </a>'
re.findall(r'>\s*(\w*)\s*<',line)
### ['foo']
#### No spaces:
line = '<a href="foo">foo</a>'
re.findall(r'>\s*(\w*)\s*<',line)
### ['foo']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.