大家好啊!我是NiJiMingCheng
我的博客:NiJiMingCheng
这节课我们来分享Python正则表达式校验中--字符校验的表达式内容,我们结合不同的示范例子来进行匹配,获取我们需要校验的内容,并返回True或False,接下来就让我们进入学习吧,加油哦!!!
在文本处理的世界里,正则表达式是一把强大的利器,能够精准地对各种格式的字符进行校验。今天,就让我们一起深入探讨一系列校验字符的正则表达式,看看它们是如何发挥作用的吧!
目录
二、校验英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
三、校验长度为 3 - 20 的所有字符:^.{3,20}$
四、校验由 26 个英文字母组成的字符串:^[A-Za-z]+$
五、校验由 26 个大写英文字母组成的字符串:^[A-Z]+$
六、校验由 26 个小写英文字母组成的字符串:^[a-z]+$
七、校验由数字和 26 个英文字母组成的字符串:^[A-Za-z0-9]+$
八、校验由数字、26 个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
九、校验中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
十、校验中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
示例代码(以^[\u4E00-\u9FA5A-Za-z0-9]+$为例)
一、校验汉字:^[\u4e00-\u9fa5]{0,}$
示例代码
import re
def validate_chinese_characters(input_str):
pattern = re.compile(r"^[\u4e00-\u9fa5]{0,}$")
if re.match(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "我爱编程"
text2 = ""
print(f"校验汉字:'{text1}' 是否匹配:{validate_chinese_characters(text1)}")
print(f"校验汉字:'{text2}' 是否匹配:{validate_chinese_characters(text2)}")
输出结果
校验汉字:'我爱编程' 是否匹配:True
校验汉字:'' 是否匹配:True
解析
在这个正则表达式中,[\u4e00-\u9fa5]
表示匹配任意一个汉字的 Unicode 编码范围。{0,}
是一个量词,表示前面的字符组(也就是汉字)可以出现零次或多次。所以,这个正则表达式可以匹配空字符串或者完全由汉字组成的字符串。
二、校验英文和数字:^[A-Za-z0-9]+$
或 ^[A-Za-z0-9]{4,40}$
示例代码(以^[A-Za-z0-9]+$
为例)
import re
def validate_english_and_digits(input_str):
pattern = re.compile(r"^[A-Za-z0-9]+$")
if re.match(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "abc123"
text2 = "Hello"
text3 = "12345"
text4 = "abc123你好"
print(f"校验英文和数字:'{text1}' 是否匹配:{validate_english_and_digits(text1)}")
print(f"校验英文和数字:'{text2}' 是否匹配:{validate_english_and_digits(text2)}")
print(f"校验英文和数字:'{text3}' 是否匹配:{validate_english_and_digits(text3)}")
print(f"校验英文和数字:'{text4}' 是否匹配:{validate_english_and_digits(text4)}")
输出结果
校验英文和数 字:'abc123' 是否匹配:True
校验英文和数字:'Hello' 是否匹配:True
校验英文和数字:'12345' 是否匹配:True
校验英文和数字:'abc123你好' 是否匹配:False
解析
对于 ^[A-Za-z0-9]+$
,[A-Za-z0-9]
表示匹配任意一个英文字母(大写或小写)或者数字。+
是一个量词,表示前面的字符组必须出现一次或多次。所以,只有当字符串完全由英文字母和数字组成,并且至少有一个字符时,才能匹配成功。
而 ^[A-Za-z0-9]{4,40}$
的区别在于,它不仅要求字符串由英文字母和数字组成,还限定了字符串的长度必须在 4 到 40 之间。
三、校验长度为 3 - 20 的所有字符:^.{3,20}$
示例代码
import re
def validate_length_3_20_characters(input_str):
pattern = re.compile(r"^.{3,20}$")
if re.match(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "abcdef"
text2 = "123"
text3 = "这是一段较长的字符串"
text4 = ""
print(f"校验长度为3 - 20的所有字符:'{text1}' 是否匹配:{validate_length_3_20_characters(text1)}")
print(f"校验长度为3 - 20的所有字符:'123' 是否匹配:{validate_length_3 - 20_characters(text2)}")
print(f"校验长度为3 - 20的所有字符:'这是一段较长的字符串' 是否匹配:{validate_length_3 - 20_characters(text3)}")
print(f"校验长度为3 - 20的所有字符:'' 是否匹配:{validate_length_3 - 20_characters(text4)}")
输出结果
校验长度为3 - 20的所有字符:'abcdef' 是否匹配:True
校验长度为3 - 20的所有字符:'123' 是否匹配:False
校验长度为3 - 20的所有字符:'这是一段较长的字符串' 是否匹配:False
校验长度为3 - 20的所有字符:'' 是否匹配:False
解析
这里的正则表达式 ^.{3,20}$
中,.
表示匹配除换行符 \n
以外的任意一个字符。{3,20}
是量词,表示前面的 .
所匹配的字符要出现 3 到 20 次。所以,只有长度在 3 到 20 之间的字符串才能匹配成功。
四、校验由 26 个英文字母组成的字符串:^[A-Za-z]+$
示例代码
import re
def validate_alphabetical_string(input_str):
pattern = re.compile(r"^[A-Za-z]+$")
if re.match(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "abcdef"
text2 = "ABCDEF"
text3 = "abc123"
print(f"校验由26个英文字母组成的字符串:'{text1}' 是否匹配:{validate_alphabetical_string(text1)}")
print(f"校验由26个英文字母组成的字符串:'{text2}' 是否匹配:{validate_alphabetical_string(text2)}")
print(f"校验由26个英文字母组成的字符串:'abc123' 是否匹配:{validate_alphabetical_string(text3)}")
输出结果
校验由26个英文字母组成的字符串:'abcdef' 是否匹配:True
校验由26个英文字母组成的字符串:'ABCDEF' 是否匹配:True
校验由26个英文字母组成的字符串:'abc123' 是否匹配:False
解析
^[A-Za-z]+$
这个正则表达式中,[A-Za-z]
表示匹配任意一个英文字母(大写或小写)。+
表示前面的字符组必须出现一次或多次。所以,只有当字符串完全由英文字母组成时,才能匹配成功。
五、校验由 26 个大写英文字母组成的字符串:^[A-Z]+$
示例代码
import re
def validate_uppercase_alphabetical_string(input_str):
pattern = re.compile(r"^[A-Z]+$")
if re.match(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "ABCDEF"
text2 = "abcdef"
text3 = "ABC123"
print(f"校验由26个大写英文字母组成的字符串:'{text1}' 是否匹配:{validate_uppercase_alphabetical_string(text1)}")
print(f"校验由26个大写英文字母组成的字符串:'{text2}' 是否匹配:{validate_uppercase_alphabetical_string(text2)}")
print(f"校验由26个大写英文字母组成的字符串:'{text3}' 是否匹配:{validate_uppercase_alphabetical_string(text3)}")
输出结果
校验由26个大写英文字母组成的字符串:'ABCDEF' 是否匹配:True
校验由26个大写英文字母组成的字符串:'abcdef' 是否匹配:False
校验由26个大写英文字母组成的字符串:'ABC123' 是否匹配:False
解析
在正则表达式 ^[A-Z]+$
中,[A-Z]
表示匹配任意一个大写英文字母。+
表示前面的字符组必须出现一次或多次。所以,只有当字符串完全由大写英文字母组成时,才能匹配成功。
六、校验由 26 个小写英文字母组成的字符串:^[a-z]+$
示例代码
import re
def validate_lowercase_alphabetical_string(input_str):
pattern = re.compile(r"^[a-z]+$")
if re.match(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "abcdef"
text2 = "ABCDEF"
text3 = "abc123"
print(f"校验由26个小写英文字母组成的字符串:{text1} 是否匹配:{validate_lowercase_alphabetical_string(text1)}")
print(f"校验由26个小写英文字母组成的字符串:{text2} 是否匹配:{validate_lowercase_alphabetical_string(text2)}")
print(f"校验由26个小写英文字母组成的字符串:{text3} 是否匹配:{validate_lowercase_alphabetical_string(text3)}")
输出结果
校验由26个小写英文字母组成的字符串:'abcdef' 是否匹配:True
校验由26个小写英文字母组成的字符串:'ABCDEF' 是否匹配:False
校验由26个小写英文字母组成的字符串:'abc123' 是否匹配:False
解析
对于正则表达式 ^[a-z]+$
,[a-z]
表示匹配任意一个小写英文字母。+
表示前面的字符组必须出现一次或多次。所以,只有当字符串完全由小写英文字母组成时,才能匹配成功。
七、校验由数字和 26 个英文字母组成的字符串:^[A-Za-z0-9]+$
示例代码
import re
def validate_digit_and_alphabet_string(input_str):
pattern = re.compile(r"^[A-Za-z0-9]+$")
if re.match(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "abc123"
text2 = "abc"
text3 = "123"
text4 = "abc123你好"
print(f"校验由数字和26个英文字母组成的字符串:{text1} 是否匹配:{validate_digit_and_alphabet_string(text1)}")
print(f"校验由数字和26个英文字母组成的字符串:{text2} 是否匹配:{validate_digit_and_alphabet_string(text2)}")
print(f"校验由数字和26个英文字母组成的字符串:{text3} 是否匹配:{validate_digit_and_alphabet_string(text3)}")
print(f"校验由数字和26个英文字母组成的字符串:{text4} 是否匹配:{validate_digit_and_alphabet_string(text4)}")
输出结果
校验由数字和26个英文字母组成的字符串:'abc123' 是否匹配:True
校验由数字和26个英文字母组成的 字符串:'abc' 是否匹配:True
校验由数字和26个英文字母组成的字符串:'123' 是否匹配:True
校验由数字和26个英文字母组成的字符串:'abc123你好' 是否匹配:False
解析
在 ^[A-Za-z0-9]+$
这个正则表达式中,[A-Za-z0-9]
表示匹配任意一个英文字母(大写或小写)或者数字。+
表示前面的字符组必须出现一次或多次。所以,只有当字符串完全由数字和英文字母组成时,才能匹配成功。
八、校验由数字、26 个英文字母或者下划线组成的字符串:^\w+$
或 ^\w{3,20}$
示例代码(以^\w+$
为例)
import re
def validate_digit_alphabet_underline_string(input_str):
pattern = re.compile(r"^\w+$")
if re.fullmatch(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "abc_123"
text2 = "abc"
text3 = "123"
text4 = "abc123你好"
print(f"校验由数字、26个英文字母或者下划线组成的字符串:'{text1}' 是否匹配:{validate_digit_alphabet_underline_string(text1)}")
print(f"校验由数字、26个英文字母或者下划线组成的字符串:'{text2}' 是否匹配:{validate_digit_alphabet_underline_string(text2)}")
print(f"校验由数字、26个英文字母或者下划线组成的字符串:'{text3}' 是否匹配:{validate_digit_alphabet_underline_string(text3)}")
print(f"校验由数字、26个英文字母或者下划线组成的字符串:'{text4}' 是否匹配:{validate_digit_alphabet_underline_string(text4)}")
输出结果
校验由数字、26个英文字母或者下划线组成的字符串:'abc_123' 是否匹配:True
校验由数字、26个英文字母或者下划线组成的字符串:'abc' 是否匹配:True
校验由数字、26个英文字母或者下划线组成的字符串:'123' 是否匹配:True
校验由数字、26个英文字母或者下划线组成的字符串:'abc123你好' 是否匹配:False
解析
正则表达式 r"^\w+$"
中,\w
表示匹配数字、英文字母或者下划线。+
表示前面匹配到的字符(也就是数字、英文字母或下划线)要出现一次或多次。^
表示匹配字符串的开始位置,$
表示匹配字符串的结束位置,整体意思是要匹配整个字符串是否完全由数字、英文字母或者下划线组成。
而 ^\w{3,20}$
除了要求字符串由数字、英文字母或者下划线组成外,还限定了字符串的长度在 3 到 20 之间。
九、校验中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
示例代码
import re
def validate_chinese_english_digit_underline_string(input_str):
pattern = re.compile(r"^[\u4E00-\u9FA5A-Za-z0-9_]+$")
if re.match(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "abc_123你好"
text2 = "abc"
text3 = "123"
text4 = "abc123"
print(f"校验中文、英文、数字包括下划线:'abc_123你好' 是否匹配:{validate_chinese_english_digit_underline_string(text1)}")
print(f"校验中文、英文、数字包括下划线:'abc' 是否匹配:True
print(f"校验中文、英 文、数字包括下划线:'123' 是否匹配:True
print(f"校验中文、英文、数字包括下划线:'abc123' 是否匹配:True
输出结果
校验中文、英文、数字包括下划线:'abc_123你好' 是否匹配:True
校验中文、英文、数字包括下划线:'abc' 是否匹配:True
校验中文、英文、数字包括下划线:'123' 是否匹配:True
校验中文、英文、数字包括下划线:'abc123' 是否匹配:True
解析
在正则表达式 ^[\u4E00-\u9FA5A-Za-z0-9_]+$
中,[\u4E00-\u9FA5A-Za-z0-9_]
表示匹配任意一个汉字、英文字母、数字或者下划线。+
表示前面的字符组必须出现一次或多次。所以,只有当字符串完全由汉字、英文字母、数字或者下划线组成时,才能匹配成功。
十、校验中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$
或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
示例代码(以^[\u4E00-\u9FA5A-Za-z0-9]+$
为例)
import re
def validate_chinese_english_digit_string(input_str):
pattern = re.compile(r"^[\u4E00-\u9FA5A-Za-z0-9]+$")
if re.match(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "abc123你好"
text2 = "abc"
text3 = "123"
text4 = "abc_123"
print(f"校验中文、英文、数字但不包括下划线等符号:'abc123你好' 是否匹配:{validate_chinese_english_digit_string(text1)}")
print(f"校验中文、英文、数字但不包括下划线等符号:'abc' 是否匹配:{validate_chinese_english_digit_string(text2)}")
print(f"校验中文、英文、数字但不包括下划线等符号:'123' 是否匹配:{validate_chinese_english_digit_string(text3)}")
print(f"校验中文、英文、数字但不包括下划线等符号:'abc_123' 是否匹配:{validate_chinese_english_digit_string(text4)}")
输出结果
校验中文、英文、数字但不包括下划线等符号:'abc123你好' 是否匹配:True
校验中文、英文、数字但不包括下划线等符号:'abc' 是否匹配:True
校验中文、英文、数字但不包括下划线等符号:'123' 是否匹配:True
校验中文、英 文、数字但不包括下划线等符号:'abc_123' 是否匹配:False
十一、禁止输入含有 ~
的字符: ^(?!.*~)[^~\x22]+$
示例代码
import re
def validate_prohibit_specific_char(input_str):
pattern = re.compile(r"^(?!.*~)[^~\x22]+$")
if re.search(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "This is a string without ~"
text2 = "Another string with no ~"
text3 = "A string with~"
text4 = "Just a normal string"
print(f"校验是否禁止输入含有特定字符:'{text1}' 是否匹配:{validate_prohibit_specific_char(text1)}")
print(f"校验是否禁止输入含有特定字符:'{text3}' 是否匹配:{validate_prohibit_specific_char(text3)}")
print(f"校验是否禁止输入含有特定字符:'{text2}' 是否匹配:{validate_prohibit_specific_char(text2)}")
print(f"校验是否禁止输入含有特定字符:'{text4}' 是否匹配:{validate_prohibit_specific_char(text4)}")
输出结果
校验是否禁止输入含有特定字符:'This is a string without ~' 是否匹配:False
校验是否禁止输入含有特定字符:'A string with~' 是否匹配:False
校验是否禁止输入含有特定字符:'Another string with no ~' 是否匹配:False
校验是否禁止输入含有特定字符:'Just a normal string' 是否匹配:True
解析
与上面类似,正则表达式 [^~\x22]+
也是取反操作。它表示匹配除了 ~
和双引号(\x22
)之外的任意一个字符,并且要求这些匹配到的字符要出现一次或多次。所以,只要输入的字符串中不包含 ~
这个字符,就能匹配成功,如 text1
、text2
和 text4
;而一旦包含了 ~
,就像 text3
那样,匹配就会失败。
十二、/[\u4E00-\u9FA5]/
汉字
示例代码
import re
def validate_chinese_characters_alt(input_str):
pattern = re.compile(r"[\u4E00-\u9FA5]")
if re.search(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "你好世界"
text2 = "Hello World"
text3 = "123"
print(f"校验是否包含汉字:'{text1}' 是否匹配:{validate_chinese_characters_alt(text1)}")
print(f"校验是否包含汉字:'Hello World' 是否匹配:False
print(f"校验是否包含汉字:'123' 是否匹配:False
输出结果
校验是否包含汉字:'你好世界' 是否匹配:True
校验是否包含汉字:'Hello World' 是否匹配:False
校验是否包含汉字:'123' 是否匹配:False
解析
正则表达式 [\u4E00-\u9FA5]
表示匹配任意一个汉字的 Unicode 编码范围。这里使用 re.search
而不是 re.match
,是因为我们只是想检查字符串中是否存在汉字,而不是要求整个字符串必须由汉字组成(像之前 ^[\u4E00-\u9FA5]{0,}$
的例子那样)。所以只要字符串中包含一个汉字,就像 text1
,就能匹配成功;而 text2
和 text3
因为不包含汉字,所以匹配失败。
十三、/[\uFF00-\uFFFF]/
全角符号
示例代码
import re
def validate_full_width_symbols(input_str):
pattern = re.compile(r"[\uFF00-\uFFFF]")
if re.search(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "!@#$%^&*()"
text2 = "abc123"
text3 = "你好"
print(f"校验是否包含全角符号:{text1} 是否匹配:{validate_full_width_symbols(text1)}")
print(f"校验是否包含全角符号:{text2} 是否匹配:{validate_full_width_symbols(text2)}")
print(f"校验是否包含全角符号:{text3} 是否匹配:{validate_full_width_symbols(text3)}")
输出结果
校验是否包含全角符号:'!@#$%^&*()' 是否匹配:True
校验是否 包含全角符号:'abc123' 是否匹配:False
校验是否包含全角符号:'你好' 是否在全角符号:False
解析
正则表达式 [\uFF00-\uFFFF]
表示匹配任意一个全角符号的 Unicode 编码范围。同样使用 re.search
来检查字符串中是否存在全角符号。只要字符串中包含一个全角符号,如 text1
,就能匹配成功;而 text2
和 text3
因为不包含全角符号,所以匹配失败。
十四、/[\u0000-\u00FF]/
半角符号
示例代码
import re
def validate_half_width_symbols(input_str):
pattern = re.compile(r"[\u0000-\u00FF]")
if re.search(pattern, input_str):
return True
return False
# 示例匹配文本
text1 = "!@#$%^&*()"
text2 = "abc123"
text3 = "你好"
print(f"校验是否包含半角符号:{text1} 是否匹配:{validate_half_width_symbols(text1)}")
print(f"校验是否包含半角符号:{text2} 是否匹配:{validate_half_width_symbols(text2)}")
print(f"校验是否包含半角符号:{text3} 是否匹配:{validate_half_width_symbols(text3)}")
输出结果
校验是否包含半角符号:'!@#$%^&*()' 是否匹配:True
校验是否包含半角符号:'abc123' 是否匹配:True
校验是否包含半角符号:'你好' 是否匹配:False
解析
正则表达式 [\u0000-\u00FF]
表示匹配任意一个半角符号的 Unicode 编码范围。通过 re.search
来查找字符串中是否存在半角符号。只要字符串中包含一个半角符号,像 text1
和 text2
,就能匹配成功;而 text3
因为不包含半角符号,所以匹配失败。
希望通过这些详细的示例和解析,能让你对这些正则表达式在字符校验方面的应用有更清晰的理解呀!如果还有任何疑问,欢迎在评论区留言哦。