截图来自莫烦python
就每个单独来演示一下:
import re
re.search(r"\w+?@\w+?\.com", "12aabbcc56@11sswq1.com")
<re.Match object; span=(0, 22), match='12aabbcc56@11sswq1.com'>
这里注意大小写:
re.search(r"\w+?\W\w+?\.com", "12aabbcc56@11sswq1.com")
re.search(r"\w+?\S\w+?\.com", "12aabbcc56@11sswq1.com")
re.search(r"\w+?.\w+?\.com", "12aabbcc56@11sswq1.com") # 这三个输出结果一样
<re.Match object; span=(0, 22), match='12aabbcc56@11sswq1.com'>
下面区分一下\W, \S, .
的不同
print(re.search(r"\w+@\S+", "12aabbcc56@派 神.com"))
print(re.search(r"\w+@\W+", "12aabbcc56@派神.com"))
print(re.search(r"\w+@.+", "12aabbcc56@派 神.com")) #注意派神中间有个空格
<re.Match object; span=(0, 12), match='12aabbcc56@派'>
None
<re.Match object; span=(0, 17), match='12aabbcc56@派神.com'>
?
的作用
re.search(r"\w+@\w+?", "12aabbcc56@11sswq1.com")
<re.Match object; span=(0, 12), match='12aabbcc56@1'>
*? 和 ??
我测试的没有什么不同,感觉可以相互替换。有知道的大神欢迎补充指导
+和*
的区别
re.search(r"\w+@\w*?", "12aabbcc56@11sswq1.com")
<re.Match object; span=(0, 11), match='12aabbcc56@'>
print(re.search(r"\w+@.{5,9}", "12aabbcc56@派 神.com"))
print(re.search(r"\w+@.{8,9}", "12aabbcc56@派 神.com"))
print(re.search(r"\w+@.{8}", "12aabbcc56@派 神.com"))
print(re.search(r"\w+@.{5}", "12aabbcc56@派 神.com"))
<re.Match object; span=(0, 18), match='12aabbcc56@派 神.com'>
None
None
<re.Match object; span=(0, 16), match='12aabbcc56@派 神.c'>
中英文匹配
re.search(r"[\u4e00-\u9fa5 A-Z a-z]+", "无聊的测试Python。")
re.search(r"[\u4e00-\u9fa5!?。,¥【】「」]+\w+", "无聊的测试。Python!")
re.search(r"[\u4e00-\u9fa5!?。,¥【】「」]+.+", "无聊的测试。Python!")
<re.Match object; span=(0, 11), match='无聊的测试Python'>
<re.Match object; span=(0, 12), match='无聊的测试。Python'>
<re.Match object; span=(0, 13), match='无聊的测试。Python!'>
flags
这里直接引用莫烦Python的代码,只记录自己不太熟悉的,详细内容请移步莫烦python
string = """I
Ran to you"""
re.search(r"(?ims).^ran", string)
string = """I
Ran to you"""
print(re.search(r"(?im).^ran", string))
<re.Match object; span=(1, 5), match='\nRan'>
None