re 正则语法

1. 逗号分割,忽视引号中的逗号

  • r :原始字符串
  • , :以逗号分割
  • \s :匹配空白字符
  • *:匹配前一个字符0次或者无数次,当出现:,,,匹配结果:'',即空字符
  • (?![^"]*\"\,):匹配"AAA",中的逗号,不匹配AAA",中的逗号,在以逗号分割的时候,忽略双引号中的逗号

问题:当字符串尾部也有双引号时,双引号内的逗号会被分割
方法:字符串后面加上,
参考来源:https://www.jianshu.com/p/d5ae083ff35d

a = '2020-03-04, "wuhan, hubei, china", covid-19 raged'
b = re.split(r',\s*(?![^"]*\"\,)', a)
# ['2020-03-04', '"wuhan, hubei, china"', 'covid-19 raged']

2. 提取文本中的数字、英文、中文

  • 0-9:数字
  • A-Za-z:英文
  • \u4e00-\u9fa5:中文
a = '2020年春节时,covid-19开始肆虐'
b = re.sub('[^0-9,.]+', '', a)

c = re.sub('[^\u4e00-\u9fa5]+', '', a)
# 年春节时开始肆虐

3. 提取两个词之间的文本

  • 两个词仅在文本中出现一次
  • 两个词在文本中出现多次,例如LEFT出现2次,希望截取最后一次出现的位置到RIGHT之间的文本
a = '关于江西省航空护林局直升机机场建设项目环境评估报告政府采购项目(采购编号:JXZC2017-03-G008)竞争性谈判公告'
b = re.findall(r'(?<=局).*?(?=采购)', a)
# 直升机机场建设项目环境评估报告政府

a1 = '民航运行管理中心和气象中心工程及情报管理中心工程配套家具采购项目'
b1 = re.findall(r'(?<=工程)((?:(?!工程).)*?)(?=采购)', a1)
# 配套家具

4.提取两个符号之间的文本

re的语法中具有特定的含义,如果希望其作为一般含义的符号使用,需要在前面加上\,即\(\"

a = '$("#pubtime_baidu").html(_formatTime(new Date("2020-08-31 09:59:30").getTime()+600*1000));'
b = re.findall(r'(?<=new Date\(\").*?(?=\"\))', a)
# 2020-08-31 09:59:30

猜你喜欢

转载自blog.csdn.net/shlhhy/article/details/107459340