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']