(Nov-30-2021, 06:21 PM)ebolisa Wrote: (Nov-30-2021, 06:15 PM)Gribouillis Wrote: I suggest this ersatz
>>> {m.group(1): m.group(2) for m in re.finditer(r'([a-z]+)\=([^=&\n]*)', request)}
{'q': '0.9\r', 'ssid': 'my_ssid', 'password': 'my_pass', 'token': '', 'ip': '192.168.1.222', 'gw': '192.168.1.1', 'sbnet': '255.255.255.0', 'dns': '8.8.8.8'}
Thanks but I cannot use this syntax as I'm using Micropython. Anyhow, I need to list the groups as in my prior post.
Then you have to prevent the capture group from matching beyond the field by excluding '&'.
import re
request = 'POST /configure HTTP/1.1\r\nHost: 192.168.4.1\r\nOrigin: http://192.168.4.1\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 15_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Mobile/15E148 Safari/604.1\r\nReferer: http://192.168.4.1/\r\nContent-Length: 108\r\nAccept-Language: en-GB,en;q=0.9\r\n\r\nssid=my_ssid&password=my_pass&token=&ip=192.168.1.222&gw=192.168.1.1&sbnet=255.255.255.0&dns=8.8.8.8'
fields = ["ssid", "password", "token", "ip", "gw", "sbnet", "dns"]
regex = "\&.*".join(f"{x}=([^&]*)" for x in fields)
match = re.search(regex, request)
print(match.group(1))
print(match.group(2))
print(match.group(3))
print(match.group(4))
Output:
my_ssid
my_pass
192.168.1.222