正则表达式#of /

时间:2016-10-22 15:54:47

标签: python regex beautifulsoup

我正在尝试将正则表达式合并到我的bs4项目中。

<a href="/event/football">football</a>
<a href="/event/rugby-union">Rugby Union</a>
<a href="/event/ladies/football">Ladies Soccer</a>
<a href="/event/womens/rugby-union">Womens Rugby</a>

我想只匹配只有2个正斜杠的前两个。我已经尝试过下面的代码,但它不起作用。我对正则表达式很差,所以会很感激一些帮助

for event in events.find_all('a', href=re.compile('^/event/[^/]')):

2 个答案:

答案 0 :(得分:1)

您可能需要在字符集后添加+,因此它不仅仅匹配一个字符:

for event in events.find_all('a', href=re.compile('^/event/[^/]+'))
#                                                              ^

答案 1 :(得分:1)

要匹配内部只有2个部分的任何href,您需要

r'^/event/[^/]+$'
              ^^

请参阅regex demo

+量词匹配量化子模式的一次或多次出现,$锚点匹配字符串的结尾,因此不再允许更多部分。

要禁止所有以-cancelled结尾的href值,请添加否定前瞻((?!.*-cancelled$)如果/event/后面跟着-cancelled后面跟着$,则会失败。在字符串末尾(r'^/event/(?!.*-cancelled$)[^/]+$' )):

(?<!-cancelled)

demo here)或带有lookbehind(-cancelled将在到达字符串结尾后执行一次,如果字符串末尾有r'^/event/[^/]+$(?<!-cancelled)' ,则匹配将失败):

term ~ opt(("+"|"-") ~ expr)

请参阅another regex demo