2015-10-08 68 views
2

我在Python它过滤的字母串需要一个命令,但不删除它们,例如:在蟒蛇过滤器字母串

string =raw_input("Enter the string:") 
if string.startswith("a") and string.endswith("aaa"): 
    print "String accepted" 
else: print "String not accepted" 
if "ba" in string: 
    print "String accepted" 
else : 
    print "String is not accepted" 

我应该添加禁止其它字母,除了a和b字符串

+1

@machineyearning类型是'str'; 'string'是一个标准的库模块,所以最好不要影响它,但这不是什么大不了的事情。 – jonrsharpe

+0

@machineyearning:正如jonrsharpe已经说过的,这里没有内建影子 –

+0

'string'不是一个类,也不是一个“内建模块”。 Builtins是那些你可以在'__builtins__'中找到的名字。也许你想说的是string是标准库中的一个模块。 –

回答

1

您可以使用一个集合,将您的字符串转换为一个集合,并检查它的一个集合subset是否只有ab。示例 -

s = raw_input("Enter the string:") 
validset = set('ab') 
if set(s).issubset(validset): 
    print "String accepted" 
else: 
    print "String not accepted" 

演示 -

>>> s = "abbba" 
>>> validset = set(['a','b']) 
>>> if set(s).issubset(validset): 
...  print "String accepted" 
... else: print "String not accepted" 
... 
String accepted 

>>> s = "abbbac" 
>>> if set(s).issubset(validset): 
...  print "String accepted" 
... else: print "String not accepted" 
... 
String not accepted 

或作为评论表明您可以使用set.issuperset()代替。示例 -

s = raw_input("Enter the string:") 
validset = set('ab') 
if validset.issuperset(s): 
    print "String accepted" 
else: 
    print "String not accepted" 
+2

你也可以使用'validset.issuperset(s)'。这样你就不需要将's'转换成一个集合。 –

+0

@AndreaCorbellini说了什么 - 加上'validset = set('ab')'也是一个选项 –

+0

是的,正确的,我已经将意见纳入答案。谢谢 –

2

你可以简单地用空字符串替换它们,并检查是否有什么事:

string = raw_input("Enter the string:") 
if string.replace('a','').replace('b',''): 
    print "String not accepted" 
else: 
    print "String accepted" 

原始字符串string将不会被修改。

+1

Python 2.x中的哪一个会更好,因为'string.translate(None,'ab')' –

0

您可以使用正则表达式来搜索要过滤的字母和组合。

^((?![abcd]).)*$将匹配的东西,不包含abcd

1

这是一个很好的使用正则表达式:

import re 
my_string = raw_input("Enter the string:") 
if re.match('^[ab]+$', my_string): 
    print "String accepted" 
else : 
    print "String is not accepted" 

这将匹配只包含字符ab,非零长度字符串。如果要匹配零长度字符串,请使用*而不是+

0

尝试类似这样的事情。它可以让你设置多个字母,符号等

valid_char = ['a', 'b'] 

def validate(s): 
    for char in s: 
     if char not in valid_char: 
      return False 
    return True 

if validate(input("Enter the string:")): 
    print('Sting Accepted') 
else: 
    print('Sting not Accepted') 
+0

为了获得* O(n)*的复杂性,我建议使用一组'valid_char'。 –

+0

嗯,以前从未使用过,上面的答案看起来像一个更好的选择 –