python - 我需要确保列表中只有某些字符?

标签 python regex string list python-2.7

我有这个来获取输入并将其放入列表中:

def start():
    move_order=[raw_input("Enter your moves: ").split()]

我只希望允许使用字符 A、D、S、C、H(用于游戏>_>)。我尝试过使用正则表达式:

if re.match('[ADSCH]+', [move_order]) is False:
    print "That's not a proper move!"
    return start()

...不同的形式...

string_test=re.compile('[ADSCH]+')
    if string_test.match(move_order]) is False:
        print "That's not a proper move!"
        return start()

啊啊啊无法让它工作。我肯定在这些代码块中做错了什么,我试图找出答案,但它不起作用。了解我做错了什么固然很好,但问题的解决方案会教会我更多我想要的东西。我什至可能不需要使用 re,但在我看来,这是完成我想要的任务的一种节省空间的方式。我认为我面临的直接问题是我不知道如何让重新使用列表(除非(当然)训练有素的眼睛可以发现其他明显的问题)。

我会继续问,因为我可能也会搞砸这个,但我还需要确保 C 永远不会在 H 之后......但是对此的一个微小提示是可以接受的,因为我喜欢把事情弄清楚。

最佳答案

匹配“ADSCH”的方法有很多
您可以使用 raw_input().upper() 摆脱 'adsch'

使用re:不要在之前进行分割

def start():
    movement = raw_input("Enter your moves: ").upper()
    if re.match('^[ADSCH\s]*$', movement):
        # it's a legal input

使用str.strip

if movement.strip(' ADSCH') == '':
    # it's a legal input

allmove_order 列表一起使用(也可以使用字符串):

def start():
    move_order=[raw_input("Enter your moves: ").upper().split()]
    if all((x in 'ADSCH' for x in move_order)):
        # it's a legal input

anymove_order 列表一起使用(也可以使用字符串):

if any((x not in 'ADSCH' for x in move_order)):
    # it's an illegal input

关于python - 我需要确保列表中只有某些字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30993079/

相关文章:

python - Django - 模板或 View 中的标记解析器?

list - 如何将包含集合的元组列表转换为字典?

Java IO 模式识别

sql - 数字和逗号的正则表达式

string - 遍历字符串失败并出现 StringIndexError

c - 坚持比较 C 中的字符串

string - Stream - 打印排序前后的值

python - ConfigObj 和单元素列表

python - 自定义选项卡中的 Django admin StackedInline

javascript - 匹配 <pre> 内的 <pre> 和 </pre>