如何分割字符串提取分隔符间内容?以提取用户名密码为例
提取字符串中的username和password值
问题描述
给定字符串:
jfdajfjlausername=Bob&djfkaak;jdskjpsasword=12345&
需要从中提取出username的值为Bob,password的值为12345。尝试过用&分割字符串但无法有效提取,现有一段未完成的Python代码:
left='password=' right='&' userleft='username=' for x in file.readlines(): if 'password=' and 'username=' in x: text=str(x) #password=(text[text.index(left)+len(left):text.index(right)]) #username=(text[text.index(userleft)+len(userleft):text.index(useright)])
解决方案
方法1:使用正则表达式(推荐)
正则可精准匹配字段名与对应值,不受前后干扰字符影响:
import re text = "jfdajfjlausername=Bob&djfkaak;jdskjpsasword=12345&" # 匹配username的值,若原字符串中password的拼写是笔误(应为password),可修改正则中的字段名 username_match = re.search(r'username=([^&]+)', text) password_match = re.search(r'psasword=([^&]+)', text) if username_match: username = username_match.group(1) print(f"username: {username}") # 输出 Bob if password_match: password = password_match.group(1) print(f"password: {password}") # 输出 12345
- 正则说明:
username=([^&]+)表示匹配username=后面直到第一个&的所有字符,括号内的部分即为要提取的值。
方法2:改进原有字符串切片代码
针对原有代码的问题,需分别定位每个字段的起始与结束位置,避免共用分隔符导致的错误:
text = "jfdajfjlausername=Bob&djfkaak;jdskjpsasword=12345&" # 提取username user_left = 'username=' user_start = text.index(user_left) + len(user_left) user_end = text.index('&', user_start) # 从username起始位置后查找第一个& username = text[user_start:user_end] # 提取password(若原字符串中是笔误,将psasword=改为password=即可) pwd_left = 'psasword=' pwd_start = text.index(pwd_left) + len(pwd_left) pwd_end = text.index('&', pwd_start) password = text[pwd_start:pwd_end] print(f"username: {username}") print(f"password: {password}")
- 关键修改:用
text.index('&', start_pos)指定从字段起始位置之后查找分隔符&,避免匹配到前面的无关符号。
注意事项
原字符串中password的拼写为psasword,若为输入笔误,需将代码中对应的字段名改为password=以匹配正确内容。
内容的提问来源于stack exchange,提问作者marina
相关产品推荐
相关产品推荐

