Python在最后一次使用时匹配了.*后面的部分

2024-09-30 18:17:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从guildwarsapi读取服务器状态。为此,我匹配servername,然后偶尔会出现一个语言说明符和一个“,\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)

Tags: re服务器api语言编辑search状态state
1条回答
网友
1楼 · 发布于 2024-09-30 18:17:12

有两件事

  1. 你应该用.*(后面的问号),它会在一开始就停止。我不认为这是好的或更好的解决办法
  2. 取而代之的是,一旦你得到了数据,就把它转换成JSON并在上面进行操作
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"])

相关问题 更多 >