Python在最后一次出现时匹配。*之后的部分

时间:2017-09-26 15:07:39

标签: python regex python-3.x

我试图从guildwars API读取服务器状态。为了匹配服务器名称,然后是一个偶然的语言说明符和一个“,\ n我打算与。*匹配。然后跟随人口。但不是直接匹配第一次出现的人口而是匹配最后一个有人可以告诉我为什么(以及如何解决这个问题)?

编辑:我找到了解决方法。将。*替换为。{,20}就可以了。

relevant part of the API
"name": "Riverside [DE]",
"population": "Full"


with urlopen('https://api.guildwars2.com/v2/worlds?ids=all') as api:
s = api.read()
s = s.decode('utf-8')
search = re.search(r'''Riverside.*"population": "''',s,re.S)
print(search)
s = s[search.span()[1]:]
state = re.search(r'[a-zA-Z]*',s)
print(state)

1 个答案:

答案 0 :(得分:1)

有两件事

  1. 你应该使用。*?(尾随问号),这将在第一次停止。我不认为这是好的或更好的解决方案
  2. 相反,一旦你将数据转换为JSON并在其上进行操作
  3. import json
    
    with urlopen('https://api.guildwars2.com/v2/worlds?ids=all') as api:
      s = api.read()
      s = s.decode('utf-8')
      jsondata = json.loads(s)
      filtered_data = filter(lambda a: str(a["name"]).find("Riverside") > -1,jsondata)
      print(filtered_data[0]["population"])