- 写一个正则表达式判断一个字符串是否是ip地址
规则:一个ip地址由4个数字组成,每个数字之间用.连接。每个数字的大小是0-255
255.189.10.37 正确
256.189.89.9 错误
import re
def main():
re_str = r'((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)'
result = re.fullmatch(re_str,'255.189.10.37')
result1 = re.fullmatch(re_str,'256.189.89.9')
print(result)
print(result1)
if __name__ == '__main__':
main()
结果如下:
<_sre.SRE_Match object; span=(0, 13), match='255.189.10.37'>
None
- 计算一个字符串中所有的数字的和
例如:字符串是:‘hello90abc 78sjh12.5’ 结果是90+78+12.5 = 180.5
"""__author__ == sxc"""
import re
#方法一#
class Count():
'''声明一个类通过调用cal()方法计算对象字符串中所有对数字和'''
def __init__(self,str:str):
self.str = str
self.count1 = 0
self.lenth = 0
def cal(self):
self.count2 = 0
self.lenth = len(self.str)
for index in range(self.lenth):
for index2 in range(index+1,self.lenth):
str2 = self.str[index:index2]
result = re.fullmatch(r'\d+\d+', str2)
result1 = re.fullmatch(r'\.\d+', str2)
if result != None:
self.count1 += float(str2)
if result1 != None:
self.count2 += float(str2)
print(self.count1+self.count2)
def main():
str1 = 'hello90abc 78sjh12.5a'
c1 = Count(str1)
c1.cal()
if __name__ == '__main__':
main()
--------
#方法二#
import re
re_str = r'\d+\.\d+|[1-9]\d+|\d'
re_str2 = r'[1-9]\d*|\d|\d+\.\d+]'
l = re.findall(re_str,"hello90abc 78sjh12.5")
# 注意:若将小数部分的判断放在后面则会使得获取出现如下错误
# 故先获取到满足小数的数字,再获取两位数以以上对数字及个位数字
# match 和 search仅匹配一次,findall匹配所有
l2 = re.findall(re_str2,"hello90abc 78sjh12.5")
print(l)
print(l2)
# 注意此处返回对列表里面是字符串
sum = 0
for item in l:
sum += float(item)
print(sum)
结果如下:
['90', '78', '12.5']
['90', '78', '12', '5']
180.5
- 验证输入的内容只能是汉字
import re
def is_character(str1):
re_str = r'[\u4E00-\u9FA5]+'
result = re.fullmatch(re_str,str1)
if result != None:
print('\'%s\'是纯汉字' %str1)
else:
print('\'%s\'不是纯汉字' %str1)
str1 = '哈哈哈'
is_character(str1)
str2 = 'hahaha'
is_character(str2)
结果如下:
'哈哈哈'是纯汉字
'hahaha'不是纯汉字
- 电话号码的验证
import re
def is_telnum(str1):
re_str = r'1[358]\d{9}|0[1-9]\d{1,2}-\d{7,8}|00[1-9]\d{1,2}-\d{7,8}'
result = re.fullmatch(re_str,str1)
if result != None:
print('\'%s\'是电话号码' %str1)
else:
print('\'%s\'不是电话号码' %str1)
str1 = '13512345678'
is_telnum(str1)
str2 = '135123456789'
is_telnum(str2)
结果如下:
'13512345678'是电话号码
'135123456789'不是电话号码
- 简单的身份证号的验证
import re
def is_idnum(str1):
re_str = r'\d{18}|\d{17}X'
result = re.fullmatch(re_str,str1)
if result != None:
print('\'%s\'是身份证号码' %str1)
else:
print('\'%s\'不是身份证号码' %str1)
str1 = '330211199511110000'
is_idnum(str1)
str2 = '33021119951111000X'
is_idnum(str2)
str3 = '3302111995111100000'
is_idnum(str3)
结果如下:
'330211199511110000'是身份证号码
'33021119951111000X'是身份证号码
'3302111995111100000'不是身份证号码
二、不定项选择题
- 能够完全匹配字符串“(010)-62661617”和字符串“01062661617”的正则表达式包括(
ABD
)
A. “(?\d{3})?-?\d{8}”
B. “[0-9()-]+”
C. “[0-9(-)]\d”
D. “[(]?\d[)-]\d*”
C 可以匹配第一个字符串,不能匹配第二个字符串
- 能够完全匹配字符串“c:\rapidminer\lib\plugs”的正则表达式包括(
B
)
A. “c:\rapidminer\lib\plugs”
B. “c:\rapidminer\lib\plugs”
C. “(?i)C:\RapidMiner\Lib\Plugs” ?i:将后面的内容的大写变成小写
D. “(?s)C:\RapidMiner\Lib\Plugs” ?s:单行匹配
A 注意 \\的转义
-
能够完全匹配字符串“back”和“back-end”的正则表达式包括(
ABD
)
A. “\w{4}-\w{3}|\w{4}” match->back,back-end fullmatch-> back,back-end
B. “\w{4}|\w{4}-\w{3}” match-> back, back fullmatch-> back,back-end
C. “\S+-\S+|\S+”
D. “\w\b-\b\w|\w*” -
能够完全匹配字符串“go go”和“kitty kitty”,但不能完全匹配“go kitty”的正则表达式包括(
AD
)
:\1就是重复前面第一个()/组合里面的内容
:\2就是重复前面第二个()/组合里面的内容
A. “\b(\w+)\b\s+\1\b”
B. “\w{2,5}\s*\1”
C. “(\S+) \s+\1”
D. “(\S{2,5})\s{1,}\1”
C都不能匹配
-
能够在字符串中匹配“aab”,而不能匹配“aaab”和“aaaab”的正则表达式包括(
BCD
)
A. “a*?b”
B. “a{,2}b”
C. “aa??b”
D. “aaa??b”
A 可以匹配aab和aaaab
网友评论