如果它们跟在数字后面,如何从字符串中提取特定符号

时间:2014-09-04 23:09:27

标签: python string

我需要从字符串中提取单个或多个符号@。我只需要一个接一个跟随的符号,不要用任何字符和空格分隔。 符号或多个符号@应紧跟在数字后面。如果不是,则应忽略这些符号而不返回。

从字符串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`

结果:@

4 个答案:

答案 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]
'@'