正则表达式确定字符串是否以数字结尾/是否包含'//'之间的数字

时间:2018-07-09 10:29:49

标签: python regex

我正在尝试评估跳出率,为了做到这一点,我正在遍历网址列表。我的问题是我有这样的字符串,例如:

  • www.example.com/43/test-1
  • www.example2.com/32/test-2

而且我无法找出正则表达式来测试字符串是否以这种格式结尾:

  • 斜杠号斜杠字符串-> /number/string

到目前为止,我要设法获得的所有URL都带有斜线之间的数字:

[x["page"] for x in data if re.search(r'\d/+$', x["page"])]

就是这样

2 个答案:

答案 0 :(得分:1)

您可以使用

/\d+/[^/]+$

模式匹配

  • /-一个/
  • \d+-1个以上数字
  • /-一个/
  • [^/]+-除/以外的1个以上的字符
  • $-字符串的结尾。

请参见Python demo

import re
urls = ['www.example.com/43/test-1', 'www.example2.com/32/test-2']
for url in urls:
    m = re.search(r'/\d+/[^/]+$', url)
    if m:
        print(m.group())

结果:

/43/test-1
/32/test-2

要仅获取数字,请用捕获组包装\d+并通过.group(1)访问值:

re.search(r'/(\d+)/[^/]+$', url)
if m:
    print(m.group(1))

One-liners

print([re.search(r'/\d+/[^/]+$', url).group(0) for url in urls if re.search(r'/\d+/[^/]+$', url)])
# => ['/43/test-1', '/32/test-2']
print([re.search(r'/(\d+)/[^/]+$', url).group(1) for url in urls if re.search(r'/\d+/[^/]+$', url)])
# => ['43', '32']

答案 1 :(得分:0)

我认为您很亲近,只需稍作修改即可。

re.search(r'\d/[^/]+$', x["page"])

这将匹配在倒数第二个路径位置带有数字的所有URL,最后一个位置带有一个或多个任何类型的字符。