python 正则表达式

193 阅读1分钟

python 正则表达式验证工具:regex101.com

一、Python中的正则表达式主要用途包括:‌

①模式匹配:‌检查一个字符串是否符合特定的模式。‌ ②查找和替换:‌在字符串中查找符合特定模式的子串,‌并进行替换。‌ ③分割字符串:‌根据正则表达式的模式来分割字符串。‌

二、基本语法和元字符:‌

.:‌匹配除了换行符之外的任何字符。‌

^:‌匹配字符串的开始位置。‌

$:‌匹配字符串的结束位置。‌

*:‌匹配前面的字符零次或多次。‌

+:‌匹配前面的字符一次或多次。‌

?:‌匹配前面的字符零次或一次。‌

{m}:‌匹配前面的字符恰好m次。‌

{n,}:匹配前一个字符至少 n 次。

{m,n}:‌匹配前面的字符至少m次,‌但不超过n次。‌

[]:‌定义字符集,‌匹配集合中的任何单一字符。‌

|:‌分隔可选的表达式,‌匹配任何可选的表达式之一。‌

():‌分组,‌将多个表达式组合成一个表达式。‌

\:‌转义字符,‌用于处理特殊字符或元字符。‌

\b:表示单词的边界。

\d:表示匹配的是数字。

\D:匹配任意单个非数字字符,等价于[^0-9]

\w:匹配任意字母、数字或下划线字符。

\s:匹配任意空白字符(空格、制表符、换行符等)。

\S:匹配任何非空白字符

\w{3}: 表示匹配三个字符。

r'':避免字符串被反复转义。

\1:后向引用,允许您在正则表达式中引用先前匹配的内容。这在需要匹配重复的模式时非常有用,例如duplicates = re.findall(r'(\b\w+\b) \1', text)

三、Python中的re模块提供的主要函数:‌

re.match():‌从字符串的起始位置开始匹配正则表达式模式,‌如果匹配成功则返回一个Match对象,‌否则返回None。‌

re.search():‌在整个字符串中搜索匹配正则表达式的第一个位置,‌如果找到匹配项则返回一个Match对象,‌否则返回None。‌

re.findall():‌返回所有匹配的子串列表。‌

re.sub():‌替换字符串中所有匹配的子串。‌

re.split():‌根据匹配的模式将字符串分割成多个子串。‌

re.compile():‌编译正则表达式字符串,‌并返回一个Pattern对象,‌以便之后使用Pattern对象的match()和search()方法进行匹配操作。‌

re.MULTILINE:需要匹配多行文本,而不仅仅是单行。例如:使用多行匹配模式匹配以大写字母开头的句子 sentences = re.findall(r'^[A-Z].*$', text, re.MULTILINE)

re.IGNORECASE:不区分大小写的匹配。

使用原始字符串表示法(‌raw string notation)‌:‌ 在Python中使用正则表达式时,‌经常需要使用反斜杠(‌\)‌来转义特殊字符。‌为了避免在字符串中反复转义,‌Python提供了原始字符串表示法,‌即在字符串前面加上'r'前缀,‌这样字符串内部的反斜杠就不会被当作转义字符处理了。‌例如,‌r'\n'表示一个包含换行符和新行符的字符串,‌而"\n"也表示包含换行符和新行符的字符串,‌但前者更简洁易读。‌

四、贪婪模式和非贪婪模式:

一般情况下,*,+,和{n,m}会尽可能多的匹配前面的子表达式,这叫贪婪模式,在重复元字符前面加上?就表示非贪婪,会尽可能少的匹配。

s = "abcadcaec"

r = re.findall(r"ab.*c", s) # 贪婪模式,尽可能多的匹配字符(.*或者.+)

print(r)

['abcadcaec']

r = re.findall(r"ab.+?c", s) # 非贪婪模式,尽可能少的匹配字符

print(r)

['abcadc']

r = re.findall(r"ab.*?c", s) # 非贪婪模式,尽可能少的匹配字符

print(r)

['abc']