例如,我们需要编写一个函数,该函数查找字符串中的第一个'@',并返回由@后面的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]
答案 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()])
此函数将返回“ @”之后的所有字母数字字符,您没有指定是否只需要第一个非字符。