Regular Expression Template with Subtab Exceptions (Python)

I am using BeautifulSoup to retrieve tabledata tags from a table. TD has a class of "a", "u", "e", "available-inaccessible" or "inaccessible-available". (Yes, I know fancy class names, but hey ...)

Here is an example:

<tr>
  <td class="u">4</td>
  <td class="unavailable-available">5</td>
  <td class="a'>6</td>
  <td class="available-unavailable">7</td>
  <td class="u">8</td>
  ...

I worked with a line that includes re.compile ():

  tab = [int(tag.string) for tag in soup.find('table',{'summary':tableSummary}).findAll("td", attrs = {"class": re.compile('\Aa')})]

I need to extract all td with class name 'a' and 'unavailable-available'. I tried some negative views, but without much luck. I would appreciate any regular expression legends that can create the correct regular expression ...

+3
source share
3 answers
table.findAll('td', attrs = {"class":re.compile(r'(^|\s)(a|unavailable-available)($|\s)')})

, "a" "-", . , .

class="a"
class="a ui-xxx"
class="ui-xxx a"
class="ui-xxx a ui-yyy"
class="unavailable-available"
class="unavailable-available foo"
+2

!

re.compile('^a(?!vail)|^un')
  • , "vail", "un". un!
0

RE- . datapoint BS + RE, (, ):

html = """
<tr> 
  <td class="u">4</td> 
  <td class="unavailable-available">5</td> 
  <td class="a">6</td> 
  <td class="available-unavailable">7</td> 
  <td class="u">8</td> 
"""

from pyparsing import makeHTMLTags, withAttribute, oneOf, SkipTo

# define opening and closing tag expressions
td,tdEnd = makeHTMLTags("TD")

# only want opening TD with certain classes
td.setParseAction(withAttribute(**{'class':oneOf("a unavailable-available")}))

# define overall pattern
patt = td + SkipTo(tdEnd)("contents") + tdEnd

# search for matches
for t in patt.searchString(html):
    print t.dump()

['TD', ['class', 'unavailable-available'], False, '5', '</TD>']
- class: unavailable-available
- contents: 5
- empty: False
- endTd: </TD>
- startTd: ['TD', ['class', 'unavailable-available'], False]
  - class: unavailable-available
  - empty: False
['TD', ['class', 'a'], False, '6', '</TD>']
- class: a
- contents: 6
- empty: False
- endTd: </TD>
- startTd: ['TD', ['class', 'a'], False]
  - class: a
  - empty: False

t.contents t['class'] ( dict, class - Python).

0

Source: https://habr.com/ru/post/1778023/


All Articles