PYTHON基础技能 – Python正则表达式的10个实用模式

释放双眼,带上耳机,听听看~!

小伙伴们,今天我们要一起探索的是Python中的一个超级神器——正则表达式(Regex),它就像是字符串处理的瑞士军刀,小巧却强大无比。别看它名字听起来高深莫测,其实掌握了几个核心模式,你也能成为字符串处理的大师。来,让我们一边玩一边学,轻松掌握这10个超实用的Python正则表达式技巧!

1. 基本匹配:从Hello World开始


1
import&nbsp;re<br><br>text&nbsp;=&nbsp;"Hello,&nbsp;World!"<br>match&nbsp;=&nbsp;re.search(r"World",&nbsp;text)<br>if&nbsp;match:<br>&nbsp;&nbsp;&nbsp;&nbsp;print("找到啦!")<br>else:<br>&nbsp;&nbsp;&nbsp;&nbsp;print("没找到。")

这段代码简单直接,

1
r"World"

是我们的正则表达式,告诉Python我们要找的是”World”这个字符串。

1
re.search()

在文本中寻找匹配项,找到了就打印“找到啦!”。

2. 贪心与非贪心:吃多与适可而止


1
text&nbsp;=&nbsp;"abracadabra"<br>match_greedy&nbsp;=&nbsp;re.search(r"a.*a",&nbsp;text)<br>match_nongreedy&nbsp;=&nbsp;re.search(r"a.*?a",&nbsp;text)<br><br>print("贪心模式:",&nbsp;match_greedy.group())<br>print("非贪心模式:",&nbsp;match_nongreedy.group())

贪心模式(

1
.*

)会尽可能多地匹配字符,而非贪心模式(

1
.*?

)则刚好相反,只匹配到能满足条件的最短字符串。所以,你会看到两个不同的结果。

3. 数字捕获:精准定位数字


1
text&nbsp;=&nbsp;"我的电话号码是123-456-7890"<br>phone_num&nbsp;=&nbsp;re.findall(r"\d+",&nbsp;text)<br>print("电话号码:",&nbsp;phone_num)

1
\d+

是一个模式,

1
\d

代表任何数字,加号(

1
+

)表示前面的元素至少出现一次,这里用来匹配连续的数字。简单一招,电话号码就手到擒来。

4. 分组与引用:灵活运用小括号


1
text&nbsp;=&nbsp;"John&nbsp;Doe,&nbsp;age&nbsp;30"<br>name,&nbsp;age&nbsp;=&nbsp;re.search(r"(\w+)&nbsp;(\d+)",&nbsp;text).groups()<br>print(f"姓名:{name}, 年龄:{age}")

小括号不简单,它们可以创建一个分组,捕获并存储匹配的文本。之后,你可以通过

1
.groups()

访问这些捕获的内容。是不是很巧妙?

5. 替换操作:改头换面


1
text&nbsp;=&nbsp;"Python&nbsp;is&nbsp;fun,&nbsp;Python&nbsp;is&nbsp;life."<br>new_text&nbsp;=&nbsp;re.sub(r"Python",&nbsp;"JavaScript",&nbsp;text)<br>print(new_text)

使用

1
re.sub()

,你可以将文本中的某些部分替换掉。这里,我们把所有的”Python”换成了”JavaScript”,体验一下语言的瞬间转换吧!

6. 邮件地址验证:精确打击


1
email_pattern&nbsp;=&nbsp;r"&#091;a-zA-Z0-9_.+-]+@&#091;a-zA-Z0-9-]+\.&#091;a-zA-Z0-9-.]+"<br>text&nbsp;=&nbsp;"contact@example.com"<br>if&nbsp;re.match(email_pattern,&nbsp;text):<br>&nbsp;&nbsp;&nbsp;&nbsp;print("有效的邮箱地址")<br>else:<br>&nbsp;&nbsp;&nbsp;&nbsp;print("邮箱地址无效")

这个模式看起来复杂,但实际上只是遵循了邮箱地址的基本结构。感叹号,这里隐藏着正则表达式的强大逻辑能力。

7. URL提取:信息时代的淘金


1
url_text&nbsp;=&nbsp;"访问https://www.example.com或http://example.org"<br>urls&nbsp;=&nbsp;re.findall(r'http&#091;s]?://(?:&#091;a-zA-Z]|&#091;0-9]|&#091;$-_@.&amp;+]|&#091;!*\\(\\),]|(?:%&#091;0-9a-fA-F]&#091;0-9a-fA-F]))+',&nbsp;url_text)<br>print("找到的网址:",&nbsp;urls)

这段代码能从文本中挖出所有URL,就像在沙子里寻找闪亮的金子。

1
http[s]?

确保它能匹配HTTP和HTTPS两种网址。

8. 重复模式:一而再,再而三


1
text&nbsp;=&nbsp;"aaabbcccddddd"<br>pattern&nbsp;=&nbsp;r"a{2,3}"&nbsp;&nbsp;<em>#&nbsp;匹配2到3个'a'</em><br>matches&nbsp;=&nbsp;re.findall(pattern,&nbsp;text)<br>print("匹配结果:",&nbsp;matches)

花括号(

1
{}

)用来指定前面元素出现的次数。这里我们找的是连续的2到3个’a’,看看效果如何?

9. 开始与结束:边界守护


1
text&nbsp;=&nbsp;"Start&nbsp;here,&nbsp;but&nbsp;not&nbsp;hereEnd."<br>start_here&nbsp;=&nbsp;re.findall(r"^Start",&nbsp;text)<br>end_here&nbsp;=&nbsp;re.findall(r"End$",&nbsp;text)<br>print("开头的Start:",&nbsp;start_here)<br>print("结尾的End:",&nbsp;end_here)

1
^

表示字符串的开始,

1
$

表示字符串的结束。这样,我们就能精确地找到位于特定位置的词。

10. 空白字符的清除:干净利落


1
text&nbsp;=&nbsp;"&nbsp;&nbsp;&nbsp;Hello,&nbsp;&nbsp;&nbsp;World!&nbsp;&nbsp;&nbsp;"<br>clean_text&nbsp;=&nbsp;re.sub(r"\s+",&nbsp;"&nbsp;",&nbsp;text).strip()<br>print("清理后的文本:",&nbsp;clean_text)

正则表达式还能帮你打扫卫生,

1
\s+

匹配任意空白字符,

1
strip()

去除两端的空白,留下一个干净的字符串。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

安全运维之道:发现、解决问题的有效闭环

2024-4-14 20:59:36

安全运维

稳定性建设 – 架构优化的关键策略

2025-2-11 17:15:56

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索