检查字符串是否仅包含正则表达式中的字符

时间:2016-12-18 08:08:54

标签: python regex python-3.x

尝试使用给定的正则表达式创建一个包含所有合法字符的函数,如果包含这些字符,则会检查字符串。

例如

import re
legal_characters = r'[\*\-]' # Matches asterisc and dash characters

def is_legal(test_string):
    if re.match(legal_characters, test_string):
        print("Legal")
    else:
        print("Not legal")

is_legal("***---123")  # should print "Not legal"
is_legal("AbC123")     # should print "Not legal"
is_legal("*-*-*")      # should print "Legal"

输出:

Not legal
Not legal
Not legal

我真的不明白为什么。有人可以解释一下吗?

4 个答案:

答案 0 :(得分:3)

这会重现您想要的内容:^匹配字符串$结尾处的开头。中间有重复的+字符\w = [A-Za-z0-9_]

legal_characters = '^\w+$'

<强>更新

在你的问题修改后,这是我的建议:

^匹配字符串$结尾处的开头。中间有+的重复[*-]元素:

legal_characters = '^[*-]+$'

无需使用*-转义\

正如 Maroun Maroun 指出的那样,你可以省略^,因为match无论如何都会扫描字符串的开头:

legal_characters = '[*-]+$'

答案 1 :(得分:2)

试试这个:

import re
legal_characters = r'\w+$' # Matches Unicode word characters
r = re.compile(legal_characters)

def is_legal(test_string):
    if re.match(r, test_string):
        print("Legal")
    else:
        print("Not legal")

is_legal("aaaAA$")  # should print "Not legal"
is_legal("AAAA***") # should print "Not legal"
is_legal("AAABBB")  # should print "Legal"

在python 2.7.12上测试。

答案 2 :(得分:1)

您不需要使用re。尝试:

legal_characters = '*-'

def is_legal(test_string):
    for s in test_string:
        if s not in legal_characters:
            print("Not legal")
            return
    print("Legal")

输出是:

>>> is_legal("***---123")
Not legal
>>> is_legal("AbC123") 
Not legal
>>> is_legal("*-*-*")
Legal

答案 3 :(得分:1)

import re
legal_characters = r'[*-]+' # Matches asterisc and dash characters

def is_legal(test_string):
    if re.fullmatch(legal_characters, test_string):
        print("Legal")
    else:
        print("Not legal")
is_legal("***---123")  # should print "Not legal"
is_legal("AbC123")     # should print "Not legal"
is_legal("*-*-*")      # should print "Legal"

出:

Not legal
Not legal
Legal

第一

  

特殊字符失去其特殊含义内部集合。对于   例如,[(+*)]将匹配任何文字字符'(','+',   '*'或')'

比:

re.fullmatch(pattern, string, flags=0)
  

如果整个字符串与正则表达式模式匹配,则返回a   相应的匹配对象。如果字符串不匹配,则返回None   模式;请注意,这与零长度匹配不同。