我正在尝试将正则表达式合并到我的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/[^/]')):
答案 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)