Python:如何从列表的结构化字符串中提取目标用户名
提取用户名的解决方案
看起来你已经成功截取掉了首尾的无关内容,现在需要从处理后的字符串里提取出用户名,最终得到[Igris, mistercint, zouce]对吧?我来帮你搞定这个问题。
首先,先明确处理后每个字符串的结构:它们都是[标签] 用户名角色的格式,比如[MVP+] IgrisGuild Master里,用户名是Igris,后面跟着角色Guild Master;[VIP] mistercintPrince里用户名是mistercint,角色是Prince。核心就是把用户名和后面的角色部分分开。
这里有两种简单的方法,适合编程新手理解:
方法一:用正则表达式(最简洁)
正则表达式可以快速匹配出我们需要的用户名部分,代码如下:
import re # 这是你处理后的memberList(e[37:-38]之后的结果) memberList = ['[MVP+] IgrisGuild Master', '[VIP] mistercintPrince', '[MVP+] zoucePrince'] # 用列表推导式提取每个字符串里的用户名 usernames = [re.search(r'\[\w+\] (.*?)([A-Z][a-z]+)', s).group(1) for s in memberList] print(usernames) # 输出: ['Igris', 'mistercint', 'zouce']
代码解释:
re.search(r'\[\w+\] (.*?)([A-Z][a-z]+)', s):这个正则表达式的作用是:\[\w+\]:匹配开头的标签部分(比如[MVP+]、[VIP])(.*?):非贪婪匹配,提取标签后面到下一个大写字母开头的单词之前的内容,这就是我们要的用户名([A-Z][a-z]+):匹配后面的角色部分(比如Guild、Prince,都是首字母大写+小写字母的格式)
.group(1):取正则匹配的第一个分组,也就是我们的用户名
方法二:用基础字符串操作(更直观,适合新手理解)
如果你还没接触过正则,用基础的字符串拆分和遍历也能实现:
# 处理后的memberList memberList = ['[MVP+] IgrisGuild Master', '[VIP] mistercintPrince', '[MVP+] zoucePrince'] usernames = [] for s in memberList: # 第一步:拆分掉前面的标签,拿到标签后面的内容(比如'IgrisGuild Master') after_tag = s.split(' ', 1)[1] # 第二步:遍历字符,找到第一个非开头的大写字母,截取前面的部分就是用户名 for index, char in enumerate(after_tag): # 跳过第一个字符(因为用户名可能首字母大写,比如Igris),找下一个大写字母 if index > 0 and char.isupper(): username = after_tag[:index] break else: # 如果遍历完没找到大写字母(极端情况),就取整个内容作为用户名 username = after_tag usernames.append(username) print(usernames) # 输出: ['Igris', 'mistercint', 'zouce']
代码解释:
s.split(' ', 1)[1]:把字符串按第一个空格拆分,取第二部分,这样就去掉了前面的[MVP+]标签- 遍历
after_tag的每个字符,找到第一个不是开头的大写字母(因为用户名的首字母可能大写,比如Igris,所以要跳过第一个字符),这个位置就是用户名和角色的分界点,截取前面的内容就是用户名 else分支是处理极端情况,防止程序出错
两种方法都能得到你想要的结果,正则更简洁,基础操作更直观,你可以根据自己的理解选择~
内容的提问来源于stack exchange,提问作者CameronScarpati
相关产品推荐
相关产品推荐

