> ## Documentation Index
> Fetch the complete documentation index at: https://www.bazhuayu.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 正则表达式

> 介绍八爪鱼采集器进阶功能：正则表达式。

### \*\*1、\*\***正则表达式简介**

正则表达式是对字符串（包括普通字符（例如，a 到 z 之间的字母）和特殊字符（称为“元字符”））操作的一种逻辑公式，就是用事先定义好的一些特定字符、及这些特定字符的组合，组成一个【规则字符串】，这个【规则字符串】用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式，该模式描述在搜索文本时要匹配的一个或多个字符串。

 

### **2、正则的\*\*\*\*用途**

字符串匹配（字符匹配）

字符串查找

字符串替换

 

### **3、常用元字符及描述**

\d 匹配一个数字字符。等价于\[0-9]

\D 匹配一个非数字字符。等价于\[^0-9]

\s 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 \[ \f\n\r\t\v]。

\S 匹配任何非空白字符。

\w 匹配构成单词的字符（字母、数字、下划线）。等价于\[A-Za-z0-9\_]

\W 匹配非构成单词的字符。等价于\[^A-Za-z0-9\_]

\p\{Lower} 英文的小写字母

.  任意一个字符

X\* 任意次数

X+ 一次或多次

X? 最多一次

X\{n} 正好n次

X\{n,} 最少n次，上不封顶

X\{n,m} 最少n次，最多m次

\[] 表示一个范围

\[a-z]|\[A-Z]   \[a-zA-Z]   \[a-z\[A-Z]]   a到z 或A到Z

\[A-Z&&\[RFG]]  A到Z并且RFG  (交集的意思)

“” 正则 “a?” 零宽度匹配，出现零次

 

#### **边界匹配**

^开头和\$结尾

^h.\*  .\*ir\$   ^h\[a-z]\{1,3}\b

\b 一个单词的边界，空格、换行……

^\[\s&&\[^\n]]\*\n\$  空白行，开头是空白字符但不是换行符，出现0次或多次，且紧跟着是结束的换行符

 

### **4、常用正则表达式**

匹配所有数字 \[0-9]+

去除所有空格  \s+

去除换行符 \n

匹配任意字符：

匹配包括换行符在内的任意字符 (\[\s\S]\*)

同时，也可以用 “(\[\d\D]\*)”、“(\[\w\W]\*)” 来表示

 

(\[\s\S]\*?)  加上问号 表示最短匹配

匹配时间 \d\{4}-\d\{2}-\d\{2}

匹配时间 20\d\{2}((\[^\d]|/s|//|:)?\d\{1,2})\{5}

匹配时间 \[0-9]\{4}年\[0-9]\{1,2}月\[0-9]\{2}日\[\s\S]\*\[0-9]\{2}:\[0-9]\{2}

匹配日期 \[0-9-:]+

匹配标题 \[0-9|.]+\[k|K|m|M|g|G|片|枚|/|L||克|l|/]+

\[0-9|.]\{1,10}\[mm]

\[0-9|.]\[0-9|/]\{1,10}\[k|K|m|M|g|G|p|片|枚|支|个|盒|条|对|/|L||克|l|/|0-9]+

名字只保留姓氏 \B.

电话加密 (?\<=\[0-9]\{3})(.)+(?=\[0-9]\{4})

以XX为结束 (\[\s\S]\*?)(?=来源)

空格开始获取and前第一个单词 \b(\[^ ]+?)\b(?= and )

去除尾部空格：(\s\*\$)

 

#### **匹配图片：**

(?\<=\<img)(.+?)(?=>)

(?\<=src=")(.+?)(\\.jpg|\\.png|\\.gif|\\.bmp|\\.jpeg)

(?\<=src=")(.+?)(\\.jpg|\\.png|\\.gif|\\.bmp|\\.jpeg|\\.JPG|\\.PNG|\\.GIF|\\.BMP|\\.GIF)

\[^/]+.jpg

\[^/]+(\\.jpg|\\.png|\\.gif|\\.bmp|\\.jpeg)

(http:|https:|//)(.+?)(\\.png|\\.jpg|\\.gif|\\.bmp|\\.jpeg)

 

### **5、常用实例**

1）如果要匹配出 \  | 这两个符号要在表达式里面加下反\\

示例用八爪鱼正则工具演示： \\\  \\|

 

2\) 表达式的开始结束表示

以什么开始不包含：(?\<=开始字符)

以什么结束不包含：(?=结束字符)

表示任意字符(.+?)

 

3\) 正则表达式如何调整文本前后位置

示例网址：[*https://www.mee.gov.cn/ywdt/szyw/*](https://www.mee.gov.cn/ywdt/szyw/)

如下图所示，将页面显示的时间样式调整为2023-11-17

<img src="https://mintcdn.com/bazhuayu/vpi4XQmibjcUgCLx/assets/academy/advanced-features/regular-expression/01-65573cf99e16b.png?fit=max&auto=format&n=vpi4XQmibjcUgCLx&q=85&s=967e356da6c604d4ec9d606c0e2c6ae5" alt="正则表达式" width="1159" height="699" data-path="assets/academy/advanced-features/regular-expression/01-65573cf99e16b.png" />

 

**第一步：做列表循环，提取列表的数据。其中提取数据步骤，设置提取红框内的时间。**

<video controls src="https://resource-wangsu.helplook.net/docker_production/3mkuae/article/lweEtU/video/65573fb99989b.mp4" width="100%" />

 

**第二步，数据预览界面，在对应的字段那里点击三个点<img src="https://mintcdn.com/bazhuayu/vpi4XQmibjcUgCLx/assets/academy/advanced-features/regular-expression/02-6557427ee375d.png?fit=max&auto=format&n=vpi4XQmibjcUgCLx&q=85&s=89a54595e2c32914c44cb0af4be2940b" alt="正则表达式" className="academy-inline-icon" width="30" height="22" data-path="assets/academy/advanced-features/regular-expression/02-6557427ee375d.png" />（更多字段操作），选择格式化数据，选择用正则表达式替换，将文本里面的换行符去掉，把时间格式化为 172023-11**

<img src="https://mintcdn.com/bazhuayu/vpi4XQmibjcUgCLx/assets/academy/advanced-features/regular-expression/03-6557417074ef5.png?fit=max&auto=format&n=vpi4XQmibjcUgCLx&q=85&s=fa9408136f0b82e2de8b1833a2d45029" alt="正则表达式" width="1210" height="810" data-path="assets/academy/advanced-features/regular-expression/03-6557417074ef5.png" />

去掉换行符的正则表达式 \n

<img src="https://mintcdn.com/bazhuayu/vpi4XQmibjcUgCLx/assets/academy/advanced-features/regular-expression/04-6557420421737.png?fit=max&auto=format&n=vpi4XQmibjcUgCLx&q=85&s=3a643b26fa6a21a056dc9d80499fe593" alt="正则表达式" width="1210" height="810" data-path="assets/academy/advanced-features/regular-expression/04-6557420421737.png" />

 

**第三步，再次选择正则表达式替换，调整时间文本内容的顺序。**

表达式如下：

(\d\{2})(\d\{4})-(\d\{2})

$2-$3-\$1

解析：()括号括起来的是表达式，\$表示表达式，表达式从左往右排序，1、2、3...

在这里：

\$2表示(\d\{4})，也就是文本2023；

\$1表示第一个(\d\{2})，也就是文本17；

\$3表示第二个(\d\{2})，也就是文本11；

中间的-不算\$表示的表达式

\$的顺序是可以调整的：

比如：$3-$1-\$2

结果为：11-17-2023

**Ps**：正则表达式匹配和正则表达式替换是两个不同的操作步骤，不要混淆。

<img src="https://mintcdn.com/bazhuayu/vpi4XQmibjcUgCLx/assets/academy/advanced-features/regular-expression/05-655743ce915e8.png?fit=max&auto=format&n=vpi4XQmibjcUgCLx&q=85&s=d1f39b9d20d7349d69c57c17949a131c" alt="正则表达式" width="1210" height="810" data-path="assets/academy/advanced-features/regular-expression/05-655743ce915e8.png" />

 

作者：Tina
