尝试使用给定的正则表达式创建一个包含所有合法字符的函数,如果仅包含这些字符,则会检查字符串。
例如
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
我真的不明白为什么。有人可以解释一下吗?
答案 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 模式;请注意,这与零长度匹配不同。