如何正确测试模式中的有效字符,可能使用字符数组或其他方法(正则表达式)

时间:2014-01-07 19:12:41

标签: python regex arrays char character-arrays

我有一个问题,我似乎无法在Python中弄清楚。我有一个模式需要匹配字符数组中的任何字符。如果没有,则存在问题。以下是我的例子:

pattern =“0000 006e 0022 0002 0156 00ac 0016 0016 0016 0041 0016 0041 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0016 0016 0041 0016 05e0 0156 0055 0016 0e41“

allowedCharacters =“123456789abcdef”

所以我的目标是看模式是否符合允许的字符。在C#中我做了以下操作,但我无法弄清楚如何在Python中完成这项工作。

这是我目前的代码。

        # Test that there are only valid characters in the pattern.
        charPattern = list(pattern)
        expression = list("01234567890abcdef")

        for currentChar in pattern:
            if len(charPattern) - pattern[-1::-1].index("0123456789abcdef") - 1:
                self.assertTrue(False, logger.failed("The invalid character: " + currentChar + " was found in the IRCode pattern for: " + ircode))`enter code here`

欢迎任何想法/建议/代码示例。

感谢。

2 个答案:

答案 0 :(得分:3)

试试这段代码:

import re
p = re.compile(r'^[0123456789abcdef\s]+$')
str = "0000 006e 0022 0002 0156 00ac 0016 0016 0016 0041 0016 0041 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0016 0016 0041 0016 05e0 0156 0055 0016 0e41"

if(p.match(str)):
  print("passed")
else:
  list = re.findall('([^0123456789abcdef\s])+', str)
  print(list)

它将在字符串中搜索0123456789abcdef\s次出现。如果某个字符不在此模式中,则它将不会传递

修改

如果代码无法通过,会增加代码,将打印无效

的所有匹配项

答案 1 :(得分:1)

def check (pattern, allowed):
    return not set(pattern) - set(allowed)