Python-正则表达式2

用句点字符匹配换行

点-星将匹配除换行外的所有字符。通过传入 re.DOTALL 作为 re.compile()的第
二个参数,可以让句点字符匹配所有字符,包括换行字符

name = re.compile(r'.*')
mo = name.search("Serve the public trust.\nProtect the innocent. \nUphold the law.")
print(mo.group())

Serve the public trust.

name = re.compile(r'.*', re.DOTALL)
mo = name.search('Serve the public trust.\nProtect the innocent. \nUphold the law.')
print(mo.group())

Serve the public trust.
Protect the innocent. 
Uphold the law.

 

复习

?匹配零次或一次前面的分组。
 *匹配零次或多次前面的分组。
+匹配一次或多次前面的分组。
{n}匹配 n 次前面的分组。
 {n,}匹配 n 次或更多前面的分组。
 {,m}匹配零次到 m 次前面的分组。
 {n,m}匹配至少 n 次、至多 m 次前面的分组。
 {n,m}?或*?或+?对前面的分组进行非贪心匹配。
 ^spam 意味着字符串必须以 spam 开始。
 spam$意味着字符串必须以 spam 结束。
 .匹配所有字符,换行符除外。
 \d、\w 和\s 分别匹配数字、单词和空格。
 \D、\W 和\S 分别匹配出数字、单词和空格外的所有字符。
 [abc]匹配方括号内的任意字符(诸如 a、b 或 c)。
 [^abc]匹配不在方括号内的任意字符。

不区分大小写

有时候你只关心匹配字母,不关心它们是大写或小写。要让正则表达式
不区分大小写,可以向 re.compile()传入 re.IGNORECASE 或 re.I,作为第二个参数。

用 sub()方法替换字符串

正则表达式不仅能找到文本模式,而且能够用新的文本替换掉这些模式。Regex
对象的 sub()方法需要传入两个参数。第一个参数是一个字符串,用于取代发现的匹
配。第二个参数是一个字符串,即正则表达式。sub()方法返回替换完成后的字符串。

name = re.compile(r'Hello,\w+')
mo = name.sub('hi,World', 'Hello,jack; I\'m xiaoming')
print(mo)

有时候,你可能需要使用匹配的文本本身,作为替换的一部分。在 sub()的第一
个参数中,可以输入\1、\2、\3……。表示“在替换中输入分组 1、2、3……的文本”。
例如,假定想要隐去密探的姓名,只显示他们姓名的第一个字母。要做到这一
点,可以使用正则表达式 Agent (\w)\w*,传入 r'\1****'作为 sub()的第一个参数。字

符串中的\1 将由分组 1 匹配的文本所替代,也就是正则表达式的(\w)分组。

name = re.compile(r'Jim (\w)\w')
mo = name.sub('1***', 'Jim Bac I have a dream Jim Naaa, and Jim Deee')
print(mo)

 

posted @ 2019-07-09 17:10  山重水复疑无路  阅读(310)  评论(0编辑  收藏  举报