正则表达式 %
概述
正则表达式(Regular Expression),简称为 regex 或 regexp,是用于描述字符串模式的一种语法。正则表达式通常被用于搜索、替换和验证字符串。
正则表达式可以看作是一种特殊的规则,用来匹配包含某种特定模式的文本。这种模式可以非常复杂,但是在掌握了正则表达式的基础知识以后,就可以无比方便地处理一些以前十分困难的问题。
正则表达式有很多种语法,都有自己的特定符号,表达特定的含义。例如,.表示匹配任意字符,*表示重复前一个字符任意次数,+表示重复前一个字符至少一次等等。同时,也可以组合这些符号,形成更加复杂的正则表达式。
在接下来的文章里,我们将介绍正则表达式的基本语法、常用符号、示例代码等,并配合实例演示正则表达式在实际开发中的使用。
基本语法
在通用的正则表达式匹配器中,我们需要用某种特定的语法规则来描述一个正则表达式。那如何编写一个满足需求的正则表达式呢?
首先,我们需要了解一些基本语法:
- 字符匹配 :
单个字符可以代表它本身,例如”a”代表”a”这个字符。如果需要精确匹配,可以直接在正则表达式中输。
- 字符集合:
当你需要匹配不止一个具体字符,可以使用方括号[]批量匹配。例如,你需要匹配一个字符串中所有的元音字母。
“`python
import re
<pre><code> str='apple and orange'
#使用[aeiou]查找所有元音字母
vowels=re.findall('[aeiou]',str)
</code></pre>
“`
- 元字符
表示一类字符集合的字符,在正则表达式中有特殊意义,需要用转义字符进行处理。 常见的元字符包括:
.: 表示任意一个字符^: 表示匹配字符串开头的字符$: 表示匹配字符串结尾的字符*: 匹配前面字符的零个或多个实例+: 匹配前面字符的一个或多个实例?: 匹配前一个字符的零个或一个实例|: 表示或操作符(): 用来表示分组,以便于后面的依赖使用
- 修饰符号
修饰符是可选的参数,在正则表达式中设置了一个匹配规则,它可以适配或者是控制匹配方式的特殊规则。例如最常见的修饰符号,就是忽略大小写匹配。Python支持的修饰符有 re.I、re.L 等修饰符。
常用符号
正则表达式中,有一些常用的符号,可以帮助我们快速地匹配一些常见的文本格式。这里介绍几个比较常见的用例。
通配符
通配符是用来匹配任意单个字符的符号,常用符号是.。比如,我们需要匹配任意一个字符b前面有两个任意字符。
“`python
import re
str='abb apple bbg bba'
result=re.findall('.bb',str)
print(result)
“`
输出[‘abb’, ‘ebb’, ‘ibb’, ‘ubb’]
精确匹配
精确匹配就是匹配指定字符,常用符号是 []。比如,我们需要匹配一个字符串中所有的大写字母。
“`python
import re
str='The Big Apple'
uppers=re.findall('[A-Z]',str)
print(uppers)
“`
输出
[‘T’, ‘B’, ‘A’]
匹配重复字符
匹配重复字符常用符号有 *、+、?等。比如,我们需要匹配一个字符串中连续出现超过2个的字母。
“`python
import re
str='abb aab ebb acddd'
result=re.findall('[a-z]{3,}',str)
print(result)
“`
输出
[‘abb’, ‘aab’, ‘ebb’, ‘acddd’]
匹配指定位置
匹配指定位置常用符号有 ^ 和 $。比如,我们需要匹配一个由数字组成的字符串,这个字符串中只有数字。
“`python
import re
str='3456789'
result=re.findall('^\d+$',str)
print(result)
“`
输出
[‘3456789’]
注意,这里使用了 ^ 和 $ 符号,^ 表示字符串开头,$ 表示字符串结尾。\d+ 表示一个或多个数字。
示例代码
下面列举了一些常见的使用正则表达式进行字符串匹配的示例代码,希望可以帮助读者更好地掌握正则表达式的使用。
简单模式匹配
import re
str = "hello world"
pattern = "world"
match = re.search(pattern, str)
if match:
print("Found!")
else:
print("Not found!")
输出
Found!
上面的代码首先定义了一个字符串 str 和针对这个字符串的正则表达式 pattern,然后使用 re.search() 函数进行匹配。如果匹配成功,则返回一个 Match 对象。
匹配多个字符串
import re
str = "This is a test, test is good"
pattern = "test"
matches = re.findall(pattern, str)
if matches:
print("Matches found:", matches)
else:
print("No matches found")
输出
Matches found: ['test', 'test']
上面的代码使用了 re.findall() 函数,它可以返回所有匹配的字符串所组成的列表。在这个示例中,正则表达式 pattern 指定了要搜索的字符串,re.findall() 函数会从 str 中找到所有匹配的字符串,并返回一个列表。
使用子表达式
import re
str = "The quick brown fox jumps over the lazy dog."
pattern = "(brown|red) fox"
matches = re.findall(pattern, str)
if matches:
print("Matches found:", matches)
else:
print("No matches found!")
输出
Matches found: ['brown']
上面的代码使用了子表达式 (brown|red) 来匹配文本中的 brown 或者 red 这两个词语,并将其存放在 matches 变量中。
匹配日期格式
import re
date_str = "2021-01-01"
pattern = "\d{4}(-\d{2}){2}"
match = re.search(pattern, date_str)
if match:
print("Found!")
else:
print("Not found")
输出
Found!
上面的代码使用正则表达式 \d{4}(-\d{2}){2} 来匹配日期格式,其中 \d{4} 表示四个数字,(-\d{2}){2} 表示连续两个由一个短横线和两个数字组成的字符串。
结论
正则表达式是一种强大的文本处理工具,通过使用它,我们可以轻松地匹配、搜索、提取文本中符合规则的内容。正则表达式语法虽然比较复杂,但是它可以提供更为精确、全面的匹配方式,从而为数据处理、文本处理等领域提供更好的解决方案。
在实际的开发中,不仅要理解正则表达式的基本语法和常用符号,还要根据具体的需求结合实际场景进行灵活应用。同时,需要注意正则表达式的性能问题,避免造成程序运行效率的降低。
总之,学好正则表达式可以帮助我们更快、更准确地处理文本数据,提高工作效率和质量。
极客笔记