【Leetcode】正则表达式

正则表达式:检查字符串是否与指定模式匹配

指定模式:re.compile(r'xxxxxxx')

|---------|--------|-----|------|-----|------|
| 符号 | 规则 | 规则释义 ||||
| ^ | 指定开头 | ^S 匹配以S开头的字符串 ||||
| | 指定结尾 | a 匹配以a结尾的字符串 ||||
| ^ | 严格匹配 | \^Sa 只能匹配Sa ||||
| \[\] | 字符簇 | a-z0-9 匹配小写字符或数字 ||||
| \^ | 排除 | \^A-Z 排除对大写字符的匹配 ||||
| . | 任意字符 | ^.a 匹配任意长度为2且以a结尾的字符串 |||| | {m,n} | 限制出现次数 | a{3,} 匹配任意以3个及3个以上a结尾的字符串 ||||
| ? | {0,1} | * | {0,} | + | {1,} |
| .* | 贪婪匹配:匹配尽可能多的字符 || .*? | 懒惰匹配:匹配尽可能少的字符 ||
| \d | 匹配数字 | \w | 匹配字符 | \s | 匹配空格 |

处理函数

  1. re.match(pattern, string, flags):从字符串的指定位置(默认起始)尝试匹配;

匹配成功返回匹配对象(可通过.span()获得坐标信息),匹配失败返回None

python 复制代码
import re
re.match('www', 'www.runoob.com').span()         # 在起始位置匹配
return (0,3)
re.match('com', 'www.runoob.com')                # 不在起始位置匹配
return None


pattern = re.compile(r'\d+')
m = pattern.match('one12twothree34four')            # 默认起始位置匹配
m = pattern.match('one12twothree34four', 2, 10)     # 指定位置匹配

2.re.search(pattern, string, flags):在完整字符串中尝试匹配;

匹配成功返回第一个成功匹配的对象(可通过.span()获得坐标信息),匹配失败返回None

python 复制代码
import re
re.match('www', 'www.runoob.com').span() 
return (0,3)
re.match('com', 'www.runoob.com').span()  
return (11,14)

3.re.sub(pattern, restr, string, count, flags):替换字符串中的匹配项

restr 替换字符串 count 替换次数,默认全部替换

python 复制代码
import re
 
phone = "2004-959-559 # 这是一个国外电话号码"
 
# 删除非数字(-)的字符串 
num = re.sub(r'\D', "", phone)
return 2004959559

4.findall:在字符串中找到正则表达式所匹配的所有子串

python 复制代码
import re
 
pattern = re.compile(r'\d+')                                    # 确定规则:查找数字
result1 = pattern.findall('runoob 123 google 456')              # 全局匹配
result2 = pattern.findall('run88oob123google456', 0, 10)        # 指定范围匹配


result = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10') 
return [('width', '20'), ('height', '10')]

match和search区别:匹配范围

findall和match/search区别:匹配次数

468 验证IP地址

给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 "IPv4" ;如果是有效的 IPv6 地址,返回 "IPv6" ;如果不是上述类型的 IP 地址,返回 "Neither" 。有效的IPv4地址 是 "x1.x2.x3.x4" 形式的IP地址。 其中 0 <= xi <= 255 且 xi 不能包含 前导零。有效的IPv6地址 是一个格式为"x1:x2:x3:x4:x5:x6:x7:x8" 的IP地址,其中:1 <= xi.length <= 4;xi 是一个 十六进制字符串 ,可以包含数字、小写英文字母( 'a' 到 'f' )和大写英文字母( 'A' 到 'F' );在 xi 中允许前导零。

python 复制代码
import re

def check_ip4(IP):
    for strr in IP:
        if len(strr)>1 and strr[0]=='0': return False
        if int(strr)>255: return False

    return True

class Solution(object):
    def validIPAddress(self, queryIP):
        """
        :type queryIP: str
        :rtype: str
        """
        ipv4 = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
        ip4 = ipv4.findall(queryIP)

        ipv6 = re.compile(r'[a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}')
        ip6 = ipv6.findall(queryIP)

        if ip6 and ip6[0] == queryIP: return 'IPv6'
        if ip4 and ip4[0] == queryIP and check_ip4(ip4[0].split('.')): return 'IPv4'
        return 'Neither'
相关推荐
Patrick在香港2 天前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
echome8883 天前
Python 正则表达式:5 个日常够用的模式
python·正则表达式
yivifu4 天前
能够使用Python正则表达式函数的文本处理工具——Calibre电子书编辑器
正则表达式
全栈陈序员4 天前
【Python】基础语法入门(二十九)—— 正则表达式实战:文本处理利器
开发语言·人工智能·python·正则表达式
BruceXu10 天前
\b 在中文里会静默失效:三个正则坑和一份能用的字符边界方案
正则表达式
阿昭L11 天前
正则表达式
正则表达式·编译原理
波力海苔夹心脆67512 天前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
FRing0313 天前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
小白快快跑哦15 天前
python-字符串全解(六):正则表达式-元字符与转义
python·正则表达式·字符串·元字符·转义
小白快快跑哦17 天前
python-字符串全解(六):正则表达式-逻辑运算或
python·正则表达式·字符串·逻辑运算