1, 单个位置的字符串提取

1.1 贪婪和非贪婪

  1. import re
  2. str = "0a没有?是非贪婪b加上?是贪婪模式b匹配最远的b"
  3. print(re.findall(r"a(.+?)b",str))
  4. #['没有?是非贪婪b加上?是贪婪模式b匹配最远的']
  5. #['没有?是非贪婪']

1.2 用 unicode 匹配中文标点

  1. import re
  2. content='【神州租车】'
  3. #这个正则表达式unicode编码
  4. # 3010【
  5. # 3011 】
  6. regex_pattern = r".*\u3010(.+)\u3011.*"
  7. print(re.findall(pattern=regex_pattern, string=content))
  8. #['神州租车']

2, 连续多个位置的字符串提取

2.1 groupdict

  1. s='2020-02-06'
  2. reg=re.compile(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})')
  3. regMatch = reg.match(s)
  4. if regMatch:
  5. print(regMatch.groupdict())
  6. else:
  7. print('没有匹配上')

2.2 贪婪和非贪婪

  1. if __name__ == '__main__':
  2. fmt = "%(asctime)s - %(filename)s:%(lineno)s - %(name)s - [%(levelname)s] - %(message)s"
  3. # 忽略大小写,提取所有括号内的内容
  4. regex = re.compile(r"\((.+?)\)", re.IGNORECASE)
  5. # 这里的提取,用到了阻止贪婪?,忽略大小写,.+?没有问号匹配的不对
  6. x=regex.findall(fmt)
  7. print(x)
  8. ['asctime', 'filename', 'lineno', 'name', 'levelname', 'message']