Python 如何不拆分字符串以检索用户名,但不检索包含无效用户名字符的用户名

Python 如何不拆分字符串以检索用户名,但不检索包含无效用户名字符的用户名,python,Python,下面的代码旨在从字符串中提取用户名,然后根据用户名在字符串中的位置返回特定用户名。我遇到的问题是,用户名应该只包含数字、字母(大写和小写)以及特殊字符,而且代码在大多数情况下都是这样做的,但是,我需要它在使用用户名时不确认包含无效字符的用户名 例如,在下面的消息“Hey@Joe07什么是@false,username!我们是否遇到@Fred08?” “Joe07”和“Fred08”应作为用户名检索,而不是@false,username!当前检索为“false”的 如果需要的话,请问我任何问题,我

下面的代码旨在从字符串中提取用户名,然后根据用户名在字符串中的位置返回特定用户名。我遇到的问题是,用户名应该只包含数字、字母(大写和小写)以及特殊字符,而且代码在大多数情况下都是这样做的,但是,我需要它在使用用户名时不确认包含无效字符的用户名

例如,在下面的消息“Hey@Joe07什么是@false,username!我们是否遇到@Fred08?”

“Joe07”和“Fred08”应作为用户名检索,而不是@false,username!当前检索为“false”的

如果需要的话,请问我任何问题,我已经尽力把问题说得尽可能清楚,但可能还是有点不对劲

 import re
    class Solution:
        def get_username(self, message, position):
            split_msg = re.findall(r"^@[\w\-]+|[\.\,\ ]@[\w\-]+", message)
            try:
                return_str = re.sub('.*@', '', split_msg[position - 1])
            except:
                return_str = ""
            return return_str

我认为更简单的方法是:

text = "Hey @Joe07 what is @false,username! are we meeting @Fred08?"

splittxt = text.split(" ")
final = []
for i in splittxt:
    if i.find('@') != -1:
        final += [i]
    else:
        pass
要删除末尾的额外特殊字符,您可以编写一行简单的代码,就像上面识别这些字符所做的那样

输出:

['@Joe07', '@false,username!', '@Fred08?']
你好像错过了脱衣舞。让它更像蟒蛇

代码:

输出:

@Joe07 @Fred08

尝试使用python用户名它在您可以引用的大部分部分都非常有效当使用它时,我在赋值之前引用了以下错误局部变量'final',抱歉,在for循环之前添加:final=[]。也编辑了主要答案
@Joe07 @Fred08