PYTHON基础技能 – Python正则表达式的10个实用模式
小伙伴们,今天我们要一起探索的是Python中的一个超级神器——正则表达式(Regex),它就像是字符串处理的瑞士军刀,小巧却强大无比。别看它名字听起来高深莫测,其实掌握了几个核心模式,你也能成为字符串处理的大师。来,让我们一边玩一边学,轻松掌握这10个超实用的Python正则表达式技巧!
1. 基本匹配:从Hello World开始
import re
text = "Hello, World!"
match = re.search(r"World", text)
if match:
print("找到啦!")
else:
print("没找到。")
这段代码简单直接,r"World"
是我们的正则表达式,告诉Python我们要找的是”World”这个字符串。re.search()
在文本中寻找匹配项,找到了就打印“找到啦!”。
2. 贪心与非贪心:吃多与适可而止
text = "abracadabra"
match_greedy = re.search(r"a.*a", text)
match_nongreedy = re.search(r"a.*?a", text)
print("贪心模式:", match_greedy.group())
print("非贪心模式:", match_nongreedy.group())
贪心模式(.*
)会尽可能多地匹配字符,而非贪心模式(.*?
)则刚好相反,只匹配到能满足条件的最短字符串。所以,你会看到两个不同的结果。
3. 数字捕获:精准定位数字
text = "我的电话号码是123-456-7890"
phone_num = re.findall(r"\d+", text)
print("电话号码:", phone_num)
\d+
是一个模式,\d
代表任何数字,加号(+
)表示前面的元素至少出现一次,这里用来匹配连续的数字。简单一招,电话号码就手到擒来。
4. 分组与引用:灵活运用小括号
text = "John Doe, age 30"
name, age = re.search(r"(\w+) (\d+)", text).groups()
print(f"姓名:{name}, 年龄:{age}")
小括号不简单,它们可以创建一个分组,捕获并存储匹配的文本。之后,你可以通过.groups()
访问这些捕获的内容。是不是很巧妙?
5. 替换操作:改头换面
text = "Python is fun, Python is life."
new_text = re.sub(r"Python", "JavaScript", text)
print(new_text)
使用re.sub()
,你可以将文本中的某些部分替换掉。这里,我们把所有的”Python”换成了”JavaScript”,体验一下语言的瞬间转换吧!
6. 邮件地址验证:精确打击
email_pattern = r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"
text = "contact@example.com"
if re.match(email_pattern, text):
print("有效的邮箱地址")
else:
print("邮箱地址无效")
这个模式看起来复杂,但实际上只是遵循了邮箱地址的基本结构。感叹号,这里隐藏着正则表达式的强大逻辑能力。
7. URL提取:信息时代的淘金
url_text = "访问https://www.example.com或http://example.org"
urls = re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', url_text)
print("找到的网址:", urls)
这段代码能从文本中挖出所有URL,就像在沙子里寻找闪亮的金子。http[s]?
确保它能匹配HTTP和HTTPS两种网址。
8. 重复模式:一而再,再而三
text = "aaabbcccddddd"
pattern = r"a{2,3}" # 匹配2到3个'a'
matches = re.findall(pattern, text)
print("匹配结果:", matches)
花括号({}
)用来指定前面元素出现的次数。这里我们找的是连续的2到3个’a’,看看效果如何?
9. 开始与结束:边界守护
text = "Start here, but not hereEnd."
start_here = re.findall(r"^Start", text)
end_here = re.findall(r"End$", text)
print("开头的Start:", start_here)
print("结尾的End:", end_here)
^
表示字符串的开始,$
表示字符串的结束。这样,我们就能精确地找到位于特定位置的词。
10. 空白字符的清除:干净利落
text = " Hello, World! "
clean_text = re.sub(r"\s+", " ", text).strip()
print("清理后的文本:", clean_text)
正则表达式还能帮你打扫卫生,\s+
匹配任意空白字符,strip()
去除两端的空白,留下一个干净的字符串。