目录
1. import re
- 1. import re
- 1.1 re.findall
- 1.2 正则字符串`'.+?'`
- 1.3 re.compile
- 1.4 re.search
- 1.5 re.sub
import re
1.1 re.findall
text="a_bc_bc_d"
content=re.findall(r'bc',text)
print(content) # ['bc', 'bc']
将符合条件的多个数据形成list r'bc'
中的r表示raw,这样可以不用在字符串中进行转义
1.1.2 匹配多个条件
text="a_bc_de_f"
content=re.findall(r'bc|de',text)
print(content) # ['bc', 'de']
用|
来匹配多个条件,只要有一个条件满足,就输出
'.+?'
首先我们来看看.+
的情况
text="a_bc_d_bc_d"
content=re.findall(r'a.+d',text)
print(content) # ['a_bc_d_bc_d']
其中.
代表除\n
之外的任意字符,可以使用re.DOTALL
让.
匹配任意字符,+
代表前面的字符出现1次或多次 可以看到获取到了整个字符串,这是因为这种情况是贪婪模式,那我们想要获取到a_bc_d
怎么办呢,看下面的代码:
text="a_bc_d_bc_d"
content=re.findall(r'a.+?d',text)
print(content) # ['a_bc_d']
其中?
表示以非贪婪方式匹配0个或1个由前面的正则表达式定义的片段
text="a_bc_bc_e"
pattern=re.compile(r'bc')
content = pattern.findall(text,0,9)
print(content)
可以看到re.compile先形成正则表达式,然后再调用findall、search等函数,而且还可以指定startPos和endPos
1.4 re.searchtext="a_bc_de_f_bc_de_g"
content = re.search(r'_(bc_de)_', text)
print(content.span()) # (1, 8)
print(content.group(1)) # bc_de
可以看到search只获取到第一个匹配到的数据,group
可以获取正则字符串·()
中的数据,span
表示获取匹配到的数据在原text中的起始位置
使用正则表达式替换多个相同字符串
text = "a_b1_b1_b1_c"
content = re.sub(r"b\d","d2",text)
print(content) # a_d2_d2_d2_c