python re正则表达式findall捕获组

import re
a="(021)66664324-01"
#re.findall优先考虑组而不是匹配项,它还会返回列表中的结果,但search不会
#在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
#注意: match 和 search 是匹配一次;   findall 匹配所有。
b1=re.findall('\)(.*)-',a)
print(b1)  #输出:  ['66664324']   #优先考虑组

b3=re.findall('\).*-',a)
print(b3)   #输出:  [')66664324-']

print('-------------------')
b2=re.search('\)(.*)-',a).group()
print(b2) #输出: )66664324-
#尝试在re.search中group()打印整个匹配项,
#而group(1)仅打印捕获的组1(组索引1内部存在的printig字符)
b4=re.search('\)(.*)-',a).group(1)
print(b4) #输出:  66664324
import pandas as pd
import re

# 构造dataframe数据
df_text = pd.DataFrame({
    'sentence': ['#Obama, says goodbye', 'Just a simple, #egg']})

# 将功能封装成一个方法
def find(text):
    h = re.findall(r'#(\w+)', text)
    print(h)
    return ''.join(h)

# pandas 结合 apply和lambda函数处理某列内容
df_text['new'] = df_text['sentence'].apply(lambda x: find(x))
print(df_text)
print('------------------')
# 清洗掉一些符号
""" (function) def sub(
    pattern: str | Pattern[str],
    repl: str | ((Match[str]) -> str),
    string: str,
    count: int = 0,
    flags: _FlagsType = 0
) -> str """
df_text['sentence']=df_text.sentence.astype('str').apply(
    lambda x: re.sub('[0-9+,,.。…、“”^_?::’‘''""()#();;【】!!*?]+', '', x))
print(df_text)
#compile(pattern, flags=0) 
#    Compile a regular expression pattern, returning a pattern object.
 
#从compile()需要和findall(), search(), match()搭配使用。 
#compile()与findall()一起使用,返回一个列表。
 
import re
     
def main():
        content = 'Hello, I am Jerry, from Chongqing, a montain city, nice to meet you……'
        regex = re.compile('\w*o\w*')
        x = regex.findall(content)
        print(x)
     
     
if __name__ == '__main__':
        main()
    # ['Hello', 'from', 'Chongqing', 'montain', 'to', 'you']
# 将数字替换为'xx'
s = '@23ab45cd'
p = r'\d+'
res = re.sub(p, 'xx', s) #使用正则替换字符串——re.sub
print('替换结果:', res)
 
# 输出:替换结果: @xxabxxcd
#search搜索整个字符串,直到遇到第一个匹配的值。如果没有匹配值,返回None。
s = '@23ab45cd'
p = r'\d+'
res = re.search(p, s) #匹配第一个符合的字符串片段——re.serach
if res:
    print('匹配结果:', res.group())
 
# 输出:匹配结果: 23
import re
s = '23ab45cd'
p = r'\d+'
res = re.match(p, s) 
#re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
#相当于你的正则表达式要和整个字符串匹配,遇到不匹配的字符直接返回None。
print(res) # 输出:   <re.Match object; span=(0, 2), match='23'>
if res:
    print('匹配开始位置:', res.start()) # 输出:匹配开始位置: 0
    print('匹配结束位置:', res.end())#匹配结束位置: 2
    print('匹配结果:', res.group())#匹配结果: 23
#匹配所有符合的值——re.findall
#返回所有的匹配结果,以列表形式返回。
#re.findall优先考虑组()而不是匹配项,它还会返回列表中的结果
s = '@23ab45cd'
p = r'\d+'
res = re.findall(p, s)
if res:
    print('匹配结果:', res)
 
# 输出:匹配结果: ['23', '45']
import re
 
line = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
#re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,
# 而 re.search 匹配整个字符串,直到找到一个匹配。
matchObj = re.match( r'(.*) are (.*?) ', line, re.M|re.I)
if matchObj:
   print ("matchObj.group() : ", matchObj.group())
   print ("matchObj.group(1) : ", matchObj.group(1))
   print ("matchObj.group(2) : ", matchObj.group(2))
else:
   print ("No match!!")
# matchObj.group() :  Cats are smarter than dogs
# matchObj.group(1) :  Cats
# matchObj.group(2) :  smarter
import re
#re.finditer
#和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
it = re.finditer(r"\d+","12a32bc43jf3") 
for match in it: 
    print (match.group(),end="   " ) #输出: 12   32   43   3  
import re
phone = '0110-12345679;0220-123456790000'
result = re.findall(r'(\d{4}-\d{8})',phone)  #(variable) result: list
print(result) #  ['0110-12345679', '0220-12345679']
for match in result: 
    print(match)
# 0110-12345679
# 0220-12345679
import re
reg = re.match(r"hello", "hello world,hello Ms peng!")
print(reg) #<re.Match object; span=(0, 5), match='hello'>
#使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
print(reg.group()) #hello

#re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
reg2 = re.match(r"([a-zA-Z0-9]{4,20})@(163|126|qq)\.com$", "hmh990506@163.com")
print('match: ',reg2.group()) #匹配的整个表达式的字符串
print(reg2.groups()) #('hmh990506', '163')


#re.search 扫描整个字符串并返回第一个成功的匹配。
reg3 = re.search(r"([a-zA-Z0-9]{4,20})@(163|126|qq)\.com$", "My Email:hmh990506@163.com")
print('search: ',reg3.group())
    
#re.search 扫描整个字符串并返回第一个成功的匹配
print(re.search(r"\d+", "阅读次数为99 99R9999").group()) 

#re.findall寻找所有符合正则的项,并返回匹配列表list[]
#'list' object has no attribute 'group',不需要用.group()
print('findall: ',re.findall(r"\d+", "python:7777,C:456321,C++:9999"))

#re.sub方法将匹配到的项进行替换
print('sub: ',re.sub("\\d+", "998", "python=997,C++=10245"))

#re.split方法根据匹配进行切割字符串,并返回一个列表list[]
print('split: ',re.split(r":| ", "info:hanmh- 21 shanxi"))

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值