我需要从字符串中提取单个或多个符号@
。我只需要一个接一个跟随的符号,不要用任何字符和空格分隔。
符号或多个符号@
应紧跟在数字后面。如果不是,则应忽略这些符号而不返回。
从字符串a
开始,我只需要提取三个@@@
符号,因为第四个符号用空格字符分隔。
a='some text 1 a8 777@@@ @ more text here 123 456`
结果将是:
@@@
从变量b
开始,函数将返回None
,因为在一个或多个数字之后不会出现单个符号@
。
b='some text @@@ @ more text here 123 456`
从c
变量只返回一个符号@
,因为它是数字之后唯一的符号(并没有与它们分开):
c='some text @@@ 777@ more text here 123 456`
结果:@
答案 0 :(得分:1)
您可以使用正则表达式:
>>> import re
>>> r = re.compile(r'\d(@+)')
>>> a = 'some text 1 a8 777@@@ @ more text here 123 456'
>>> r.search(a).group(1)
'@@@'
>>> b = 'some text @@@ @ more text here 123 456'
>>> r.search(b) #None
>>> c = 'some text @@@ 777@ more text here 123 456'
>>> r.search(c).group(1)
'@'
将其与if
条件组合以检查正则表达式是否与字符串中的任何内容匹配:
>>> m = r.search(c)
>>> if m:
print m.group(1)
@
答案 1 :(得分:1)
虽然这可能是一个正则表达式,但如果你不知道正则表达式是什么,循环更容易理解。
i = 0
found = False
while i < len(string) and not found:
if i != 0 and string[i] == '@':
if string[i-1].isnumeric():
found = True
else:
i+=1
else:
i+=1
if not found:
return None
else:
out = ''
while string[i] == '@':
out += '@'
i+=1
return out
可能可以更好地重写,但这是一种简单的方法。
脚注:虽然正则表达式会更好。
答案 2 :(得分:1)
import re
print re.findall('[0-9]@+', a)
这将打印一个包含所有匹配项的列表,在上面的例子中它将打印
['7@@@']
现在你可以对字符串进行切片,以获得你想要的东西。
希望这有帮助!
答案 3 :(得分:0)
这对你有用吗?
>>> import re
>>> re.search('\d(@+)', a).groups()[0]
'@@@'
>>> re.search('\d(@+)', b)
>>> re.search('\d(@+)', c).groups()[0]
'@'