用正则寻找配对
pattern1 = "cat"
pattern2 = "bird"
string = "dog run to cat"
res = re.search(pattern1, string)
匹配多种可能 []
print(re.search(r"r[A-Z]n", "dog runs to cat"))
print(re.search(r"r[A-Za-z]n", "dog runs to cat"))
print(re.search(r"r[0-9]n", "dog r6ns to cat"))
print(re.search(r"r[0-9a-z]n", "dog rbns to cat"))
print(re.search(r"dog", "dog rbns to cat").span())
数字\d
print('--------------------')
print(re.search(r"r\dn", "dog r6ns to cat"))
非数字\D
print(re.search(r"r\Dn", "dog rgns to cat"))
空白 any white space [\t\n\r\f\v]
[\t\n\r\f\v]在字符串里面代表空白,用\s来匹配
print(re.search(r"r\sn", "dog r\nns to cat"))
\S与\s相反,匹配非空白
print(re.search(r"r\Sn", "dog r\nns to cat"))
所有的字母,数字和 "_"
r"[a-zA-Z0-9_]"
用\w表示
print(re.search(r"r\wn", "dog r\nns to r4n cat"))
\W opposite to \w \w的取反
print(re.search(r"r\Wn", "dog r\nns to r4n cat"))
空白字符 border 词边界
print(re.search(r"\bruns\b", "dog runs to r4n cat"))
特殊字符 任意字符
print(re.search(r"runs\\", "dog runs\\ to cat"))
print(re.search(r"r.ns", "dog r[ns to cat"))
'.'可以匹配任意数字字母字符等等
句首句尾
print(re.search(r"^dog","dog runs to cat" )) 以dog 开头
print(re.search(r"cat$","dog runs to cat" )) 以cat 结尾
是否
print(re.search(r"Mon(day)?","Monday" ))
print(re.search(r"Mon(day)?","Mon" ))
8 多行匹配
muti-line
string = """
dog runs to cat
I run to dog.
"""
print(re.search(r'^I', string))
只匹配字母串行首
print(re.search(r'^I', string, flags=re.M))
加这个flags=re.M,是多行匹配,这个题的意思是找每一行的行首是不是I.
每一行结尾都有一个换行符,所以是算一个字符
0 或 多次
print(re.search(r"ab*", "a"))
print(re.search(r"ab*", "abbb"))
1 或 多次
print(re.search(r"ab+", "a"))
print(re.search(r"ab+", "ab"))
print(re.search(r"ab+", "abbbbbb"))
次数可选
print(re.search(r"ab{2,10}", "a"))
print(re.search(r"ab{2,10}", "ab"))
print(re.search(r"ab{2,10}", "abbbb"))
次数可以根据自己需要,往{}里面随意填写
组 group
match = re.search(r"(\d+), Date: (.+)", "ID: 012345, Date: Feb/12/2017")
print(match)
print(match.group())
print(match.group(1))
取第一个正则表达式的结果
print(match.group(2))
取第二个正则表达式的结果
组起名
match = re.search(r"(?P<id>\d+), Date: (?P<date>.+)", "ID: 012345, Date: Feb/12/2017")
把(?P<id>\d+)取到的正则表达式的结果命名为id,把(?P<date>.+)取到的正则表达式的结果命名为date
print(match)
print(match.group())
print(match.group('id'))
把命名为id的正则表达式结果输出
print(match.group('date'))
把命名为date的正则表达式结果输
仅匹配字符串开头
print()
print(re.search(r"\Aabc", "abcd"))
print(re.search(r"\Aabc", " abcd"))
仅匹配 字符串末尾
print(re.search(r"abc\Z", "dsafsdabc"))
print(re.search(r"abc\Z", "dsafsdabcd"))
等号后面是表达式, 匹配表达式才能成功
print(re.search(r"a(?=\d)", "a123"))
print(re.search(r"a(?=\d)", "ax123"))
print(re.search(r"a(?=\w)", "ax123"))
print(re.search(r"a(?=\w)", "a*123"))
print(re.search(r"a(?=y)", "ay123"))
print(re.search(r"a(?=y\d)", "ay123"))
print()
print(re.search(r"a(?=y\d)", "ayu23"))
print(re.search(r"a(?=y\W)", "ay^23"))
!后面是表达式。 不匹配表达式 才能成功
print(re.search(r"a(?!\W)", "as^23")) 第138行 的取反
19 ? 后面表达式, 匹配了才能成功 BRE
print('===================')
print(re.search(r"(?<=\d)a", "123a"))
print(re.search(r"(?<=123)a", "123a"))
print(re.search(r"(?<=124)a", "123a"))
print("dog r\ns to cat")
\n是换行符
match 方法
match 尝试从字符创的起始位置匹配一个模式(正则),如果不是起始位置匹配成功的话,就返回None.
re.I 对大小写不敏感。
re.M 多行匹配
print(re.match('google', 'www.google.com'))
print(re.match('google', 'gooGle.com', flags=re.I))
re.search 方法
该方法会扫描整个字符串, 并返回第一个成功的匹配