Pyparsing允许您使用内置
htmlComment表达式搜索HTML注释,并附加解析时回调以验证和提取注释中的各种数据字段:
from pyparsing import makeHTMLTags, oneOf, withAttribute, Word, nums, Group, htmlCommentimport calendar# have pyparsing define tag start/end expressions for the # tags we want to look for inside the commentsspan,spanEnd = makeHTMLTags("span")i,iEnd = makeHTMLTags("i")# only want spans with class=titlefontspan.addParseAction(withAttribute(**{'class':'titlefont'}))# define what specifically we are looking for in this commentweekdayname = oneOf(list(calendar.day_name))integer = Word(nums)dateExpr = Group(weekdayname("day") + integer("daynum"))commentBody = '<!--' + span + i + dateExpr("date") + iEnd# define a parse action to attach to the standard htmlComment expression,# to extract only what we want (or raise a ParseException in case # this is not one of the comments we're looking for)def grabCommentContents(tokens): return commentBody.parseString(tokens[0])htmlComment.addParseAction(grabCommentContents)# let's try ithtmlsource = """want to match this one<!-- <span > <i>Wednesday 110518</i>(05:00PM)<br /></span> -->don't want the next one, wrong span class<!-- <span > <i>Wednesday 110519</i>(05:00PM)<br /></span> -->not even a span tag!<!-- some other text with a date in italics <i>Wednesday 110520</i>(05:00PM)<br /></span> -->another matching comment, on a different day<!-- <span > <i>Thursday 110521</i>(05:00PM)<br /></span> -->"""for comment in htmlComment.searchString(htmlsource): parsedDate = comment.date # date info can be accessed like elements in a list print parsedDate[0], parsedDate[1] # because we named the expressions within the dateExpr Group # we can also get at them by name (this is much more robust, and # easier to maintain/update later) print parsedDate.day print parsedDate.daynum print印刷品:
Wednesday 110518Wednesday110518Thursday 110521Thursday110521



