找到最后一场比赛时获得空列表

时间:2015-08-30 17:40:12

标签: python regex

我想在网址中找到斜杠之间的最后一个字。例如,在“/ gallery / haha​​ / nika / 7907 / 08-2015”中找到“nika”

我在我的python代码中写了这个:

var lat = <?php echo json_encode($lat)?>;
var lon = <?php echo json_encode($lon)?>;
var unidad = <?php echo json_encode($unidad)?>;

while (i < <?php echo json_encode($a)?>) 
{

var pos = new google.maps.LatLng(lat[i],lon[i]);
    var marker = new MarkerWithLabel({
       position: pos,
       draggable: true,
       raiseOnDrag: true,
       map: map,
       icon: 'icon.png',
       labelContent: unidad[i],
       labelAnchor: new google.maps.Point(22, 0),
       labelClass: "labels", // the CSS class for the label
       labelStyle: {opacity: 0.75},


     });

但我有一个空列表:

>>> text = '/gallery/haha/nika/7907/08-2015'
>>> re.findall(r'/[a-zA-Z]*/$', text)

如果我删除那个美元符号:

[]

返回列表不为空,但错过了“/ haha​​ /”:

>>> re.findall(r'/[a-zA-Z]*/', text)

有谁知道为什么?

3 个答案:

答案 0 :(得分:5)

中使用 lookarounds
re.findall(r'(?<=/)[a-zA-Z]*(?=/)', text)

See demo

$表示字符串结束,因此您将获得空字符串。

haha因为您正在捕获/而丢失,因此/不会留给haha。使用lookarounds时,它是一个 0宽度断言,它不会消耗/,因此所有都被捕获。

答案 1 :(得分:2)

你不需要正则表达式,

>>> s = "/gallery/haha/nika/7907/08-2015"
>>> for i in reversed(s.split('/')):
    if i.isalpha():
        print(i)
        break


nika

>>> [i for i in s.split('/') if i.isalpha()][-1]
'nika'
>>> 

>>> j = s.split('/')
>>> [i for i in j if i.isalpha()][-1]
'nika'

答案 2 :(得分:2)

  

我想在斜线之间找到最后一个字......

要获得最后一次......你可以随时扔掉greedy dot来吃掉:

^.*/([a-zA-Z]*)/

capture想要$1的东西。见test at regex101