我想识别字符串中与我搜索的字符串相对的字符。
换句话说,如果我搜索'示例文字'在下面的字符串中,我想识别出来之前和之后的直接字符'示例文字'并且还有'<&#;和'>'。
例如,如果我在下面的字符串中搜索了&#39;示例文字&#39;,我希望函数返回<h3>
和</h3>
,因为这些是字符紧接着它之前和之后。
String = "</div><p></p> Random Other Text <h3>Example Text</h3><h3>Coachella Valley Music & Arts Festival</h3><strong>Random Text</strong>:Random Date<br/>"
答案 0 :(得分:1)
我不相信你在这里问正确的问题。我认为你的目标是:
给定一段文字,我如何捕捉封装它的html元素
非常不同的问题和一个永远不应该用正则表达式解决的问题。如果你想知道原因,只需谷歌吧。
就其他问题而言,捕获相关的html标记时,我建议使用lxml
。可以找到文档here。对于您的用例,您可以执行以下操作:
>>> from lxml import etree
>>> from StringIO import StringIO
>>> your_string = "</div><p></p> Random Other Text <h3>Example Text</h3><h3>Coachella Valley Music & Arts Festival</h3><strong>Random Text</strong>:Random Date<br/>"
>>> parser = etree.HTMLParser()
>>> document = etree.parse(StringIO(your_string), parser)
>>> elements = document.xpath('//*[text()="Example Text"]')
>>> elements[0].tag
'h3'
答案 1 :(得分:0)
不使用正则表达式的原因:
如果要解析HTML / XML,请使用HTML / XML解析器。 lxml
是一个不错的选择,我个人更喜欢使用BeautifulSoup,因为它使用public IList<Article> getArticleByIdWithSortedSubarticles(int ArticleId)
{
var query = _articleRepository.Table;
query = query.Where(a => ArticleId == a.Id)
.Select(a => a);
var subarticles = query.ToList();
return subarticles;
}
进行繁重的工作,但也有其他功能,并且更加用户友好,尤其是快速比赛。
答案 2 :(得分:0)
我相信它可以由beautifulsoup
完成from BeautifulSoup import BeautifulSoup
String = "</div><p></p> Random Other Text <h3>Example Text</h3><h3>Coachella Valley Music & Arts Festival</h3><strong>Random Text</strong>:Random Date<br/>"
soup = BeautifulSoup(String)
input = 'Example Text'
for elem in soup(text=input):
print(str(elem.parent).replace(input,'') )
答案 3 :(得分:-2)
您可以使用正则表达式<[^>]*>
来匹配标记,然后使用用括号定义的组将匹配项分离到您想要的块中:
m = re.search("(<[^>]*>)Example Text(<[^>]*>)", String)
m.groups()
Out[7]: ('<h3>', '</h3>')