还有更多的“ pythonic”方法可以做到这一点吗?

时间:2019-08-02 17:25:39

标签: python python-3.x

例如,我们需要编写一个函数,该函数查找字符串中的第一个'@',并返回由@后面的0个或多个字母字符组成的子字符串,因此'xx @ abc $$'返回'abc'。如果不存在@,则返回空字符串。

我像那样解决了它,但是还有更多Python方式可以做到这一点吗?

def func(s):
    at = s.find('@')
    if at == -1:
        return ''
    end = at + 1
    while end < len(s) and s[end].isalpha():
        end += 1
    return s[at+1:end]

3 个答案:

答案 0 :(得分:2)

您可以使用regex

import re
def func(s):
    r = re.search(r'@([A-Za-z]+)', s)
    return r.group(1) if r else ""
print(func('xx@abc$$')) # abc

此模式也适用:

r = re.search(r'@(\w+)', s)

答案 1 :(得分:1)

您可以使用正则表达式,使用模式r'@([A-Za-z]+)'与前导@相匹配,后跟一个或多个字母

import re

def func(s):

    pattern = r'@([A-Za-z]+)'
    match = re.search(pattern, s)

    #Return match if found else return empty string
    return match.group(1) if match else ''

print(func('xx@abc$$'))
print(func('xx@abc$$'))
print(func('xx@ab12$$'))
print(func('xxabc$$'))

输出将为

abc
abc
ab

答案 2 :(得分:1)

def func(s):
    # find the @ index
    start_idx = s.find("@")
    # return early if not there
    if start_idx == -1:
        return ""
    # return a string which to it is added the letters that specify criteria
    return "".join([letter for letter in s[start_idx:] if letter.isalpha()])

此函数将返回“ @”之后的所有字母数字字符,您没有指定是否只需要第一个非字符。