整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Word技巧:如何使用正则表达式高效替换

Word技巧:如何使用正则表达式高效替换

转载自Stata连享会:


目录

  • 1. 引言
  • 2. 内容转置
    • 2.1转置姓名
    • 2.2转置日期
  • 3. 批量换行
    • 3.1 题号后加换行符
    • 3.2 选项前加换行符

1. 引言

在日常生活中,我们经常需要使用 Word 的查找与替换功能来处理一些简单数据。如果数据相对复杂,我们就需要借助 Word 的正则表达式。关于正则表达式,我们先来定义以下术语:

  • 通配符:指的是可以用来代表一个或多个字的字符。例如,星号 * 通常代表一个或多个字符,问号 ? 通常代表单个字符;
  • 正则表达式:指的是可以用来查找和替换文本模式的文本字符和通配符组合。文本字符指的是必须存在于目标文本字符串中的文本,通配符指的是目标字符串中可能各不相同的文本。

描述

类型

示例

任一字符

?

s?t 可找到 "sat" 和 "set"

任何字符串

*

s*d 可找到 "sad" 和 "started"

单词开头

<

<(inter) 可找到 "interesting" 和 "intercept",但找不到 "splintered"

单词结尾

>

(in)> 可找到 "in" 和 "within",但找不到 "interesting"

指定字符之一

[ ]

w[io]n 可找到 "win" 和 "won"

此范围内的任一字符

[-]

[r-t]ight 可找到 "right" 和 "sight",范围必须是升序

除了括号内范围中的字符之外的任一字符

[!x-z]

t[!a-m]ck 可找到 "tock" 和 "tuck",但找不到 "tack" 或 "tick"

前一个字符或表达式的 n 个匹配项

{n}

fe{2}d 可找到 "feed",但找不到 "fed"

前一个字符或表达式的至少 n 个匹配项

{n,}

fe{1,}d 可找到 "fed" 和 "feed"

前一个字符或表达式的 n 到 m 个匹配项

{n,m}

10{1,3} 可找到 "10"、"100" 和 "1000"

前一个字符或表达式的一个或多个匹配项

@

lo@t 可找到 "lot" 和 "loot"


2. 内容转置

本节介绍了如何使用正则表达式转置姓名、转置日期。

2.1 转置姓名

第一步,启动 Word,打开一个新的空白文档。复制此文字,将它粘贴到该文档中。

 Josh Barnhill
 Doris Hartwig
 Tamara Johnston
 Daniel Shimshoni

第二步,在「开始」选项卡上的「编辑」组中,单击「替换」以打开「查找和替换」对话框。

第三步,选中「使用通配符」复选框。若没有看到「使用通配符」复选框,请单击「更多」,然后选中该复选框。没有选中该复选框时,Word 会将通配符视作文本。

第四步,在「查找内容」框中键入 (<*>) (<*>)。注:两组括号之间包含了空格。

第五步,在「替换为」框中,键入 , 。注:在逗号和第二个斜杠之间包含了空格。然后单击「全部替换」。Word 会转置这些姓名并使用逗号分隔它们。

关于正则表达式,在第一个表达式 (<*>) (<*>) 中:

  • 星号 * 代表任意字符串,会返回单词中的全部文本;
  • 小于和大于符号 < > 分别标记了每个单词的开始和结束。它们确保搜索会返回单个单词;
  • 它们之间的括号和空格将单词拆分成不同的组,即 (第一个单词) 和 (第二个单词)。

在第二个表达式 , 中:

  • 斜杠 \ 与数字放在一起充当占位符;
  • 第一个占位符后的逗号,是在两个被转置的姓名之间插入想添加的标点符号;
  • 该表达式含义是,写入第二个单词,添加逗号,写入第一个单词。

2.2 转置日期

第一步,启动 Word,打开一个新的空白文档。复制此文字,将它粘贴到该文档中。注意粘贴时只保留文本。

 28th May 2003
 1st Jun 2008
 2nd Feb 2010
 3rd Apr 2020

第二步,按照上文描述打开「查找和替换」对话框,并选中「使用通配符」复选框。

第三步,在「查找内容」框中键入 ([0-9]{1,2})([dhnrst]{2}) (<[ADFJMNOS]*>) ([0-9]{4})

第四步,在「替换为」框中,键入 , 。注:确保在每个字符集之间插入空格。

第五步,单击「全部替换」。

关于正则表达式,第一个表达式 ([0-9]{1,2})([dhnrst]{2}) (<[ADFJMNOS]*>) ([0-9]{4}) 的作用是将日期分解为四个部分,由多组括号来表示。具体来看:

  • 第一部分 ([0-9]{1,2})。数字范围 [0-9] 匹配第一个模式中的一位数数字。因为日期可以由两个数字组成,我们让搜索返回一位数或两位数的日期 {1,2}
  • 第二部分由序数词组成。序数词包含 "th"、"nd"、"st" 和 "rd",因此我们将这些字母添加到范围 [dhnrst] 中。因为序数词总是由两个字母组成,我们将字母计数限制为 2,即 ([dhnrst]{2})
  • 第三部分是查找月份名的文本字符和通配符。所有月份名都以这些大写字母开头 "ADFJMNOS"。我们不知道每个大写字母后有多少个字符,因此我们在它们之后使用星号 *。我们只对月份名本身感兴趣,因此我们使用 <> 字符来将结果限制为单个单词,即 (<[ADFJMNOS]*>)
    • 星号 * 代表任意字符串,会返回单词中的全部文本;
    • 小于和大于符号 < > 分别标记了每个单词的开始和结束,它们确保搜索会返回单个单词;
  • 第四部分为年。我们使用相同的数字范围,但这次我们将计数限制为四个字符 ([0-9]{4})

在第二个表达式 , 中:

  • 斜杠 \ 与数字放在一起充当占位符;
  • 第一个占位符后的逗号在两个被转置的姓名之间插入想添加的标点符号;
  • 该表达式的含义是,写入第二个单词,添加逗号,写入第一个单词。


3. 批量换行

本节介绍了如何使用正则表达式将 "题号" 替换成 "题号、+换行" 和将选项 "B." 替换成 "换行符+B."。

3.1 题号后加换行符

第一步,启动 Word,打开一个新的空白文档。复制此文字,将它粘贴到该文档中。

 5、风险管理的主体是( )
 A、法人 B、个人 C、任何组织和个人 D、组织
 6、风险管理效益的大小,取决于( )
 A、是否能以最小风险成本取得最大安全保障 B、是否能以最小风险成本取得最小安全保障 C、是否能以最大风险成本取得最小安全保障 D、是否能以最大风险成本取得最大安全保障
 7、风险管理的方法分为( )
 A、控制型和财务型 B、自留型和转移型 C、控制型和转移型 D、自留型和控制型
 8、利用签订销售、建筑、运输合同处理风险的风险管理方法是( )
 A、财务型保险转移风险 B、财务型非保险转移风险 C、避免型风险管理 D、控制型风险管理

第二步,按照上文描述打开「查找和替换」对话框,并选中「使用通配符」复选框。

第三步,在「查找内容」框中键入 (<[0-9]{1,2}>、)

第四步,在「替换为」框中,键入 ^p。注:确保在每个字符集之间插入空格。

第五步,单击「全部替换」。

关于正则表达式,在第一个表达式 (<[0-9]{1,2}>、) 中:

  • 小于和大于符号 < > 分别标记了每个单词的开始和结束;
  • [0-9] 代表匹配从 0 到 9 的数字;
  • {1,2} 代表数字有 1 到 2 位。如果是 {1,7},就是数字有 1 到 7 位;
  • 顿号 则就代表字符串 "、"。

在第二个表达式 ^p 中:

  • 代表第一个变量;
  • ^p 代表段落标记符号。

3.2 选项前加换行符

第一步,按照上文描述打开「查找和替换」对话框,并选中「使用通配符」复选框。

第二步,在「查找内容」框中键入 (<[BCD]{1,1}>)

第三步,在「替换为」框中,键入 ^p。注:确保在每个字符集之间插入空格。

第四步,单击「全部替换」。


? 转载自Stata连享会:

? 纯属练习Markdown,文章内容也经过精心挑选

? 为实现页面中的跳转,利用HTML语法的a标签实现,可惜没效果,知道原因的条友请告知

注意: 据Typora官方问档显示,可以用a标签实现上述方法,不可以用HTML里的span标签

几天,我手里的一个项目需要将富文本的所有 html 标签全部删除,得到纯文本后再存储到数据库中。在一系列得搜索操作之后,我找到了实现这个目的的几种方法,在这里我分享给大家,当你遇到同样的情况兴许也能用的上。

1. 使用 .replace(/<[^>]*>/g, '')

这个方法是从文本中去除 html 标签最简单的方法。它使用字符串的方法 .replace(待替换的字符串,替换后的字符串) 将 HTML 标签替换成空值。 /g 是表示替换字符串所有匹配的值,即字符串中所有符合条件的字符都将被替换。

这个方法的缺点是有些 HTML 标签不能被剔除,不过它依然很好用。

2. 创建临时DOM元素并获取其中的文本

这种方法是完成该问题的最有效的方法。创建一个临时 DOM 并给他赋值,然后我们使用 DOM 对象方法提取文本。

3. 使用 html-to-text npm 包

html-to-text 这个包的功能很全了,转换也有许多的选项比如:wordwrap, tags, whitespaceCharacters , formatters 等等。

安装:

npm install html-to-text

使用:

最后感谢阅读,如果此文对您有帮助,请点赞或添加关注。

xcel 中除了使用查找替换功能批量替换字符外,还可以使用文本替换类函数将字符串中的部分或全部内容替换成新的字符串。文本替换类函数包括SUBSTITUTE函数、REPLACE函数,以及用于区分双字节字符的REPLACEB函数。

一、 字符替换函数SUBSTITUTE

SUBSTITUTE函数用于将字符串中指定的字符替换为新的文本字符串。函数语法如下SUBSTITUTE(text,old text,new_text,[instance_num])

第一参数text是必需参数,为需要替换其中字符的原始文本或单元格引用。

第二参数old_text是必需参数,为需要被替换的“旧文本”。如果第一参数的字符串中入包含该参数的字符串,则返回原始文本。

第三参数new_text是必需参数,为用于替换的“新文本”。如果该参数为空文本或省路参数的值仅保留参数之前的逗号时,相当于将需要替换的“旧文本”删除。

第四参数instance_num是可选参数,表示替换第几个“旧文本”。如果省略该参数,所有“旧文本”都会被替换。示例如下:

例:使用SUBSTITUTE函数计算平均分

上图中,B列的数据记录不规范,有的单元格中仅包含数字,有的单元格最后包含“分”字,需要在D2单元格中计算平均分。

在D2单元格中输入以下数组公式,按<Ctrl+Shift+Enter>组合键。

{=ROUND(AVERAGE(--SUBSTITUTE(B2:B7,"分",)),2)}

公式中SUBSTITUTE函数的第三参数省略,表示将B2:B7单元格中的“分”字替换为空。不包含“分”字的单元格将不受影响,返回原有的内容。使用“--”(两个负号)将SUBSTITUTE函数的结果由文本转换为数值,再由AVERAGE函数进行求平均数,用ROUND函数保留二位小数。

提示:

本例仅作为SUBSTITUTE函数的一项使用方法说明,不代表所有不规范的数据都能够通过函数的方法完成计算。实际输入数据时可将不同类别的数据单独一列存放,数值后面不加文本。如果使用类似“1箱54只”“3包22个”的数据输入形式,将对后续的汇总带来极大的麻烦。

例:使用SUBSTITUTE函数计算部门人数

下图为某单位人员名单的部分内容,B列中每个单元格中有多个人员编号,中间用半角逗号作为分隔。需要在C列计算每个部门的人数。

在C2单元格中输入以下公式,向下复制到C6单元格。

=LEN(B2)-LEN(SUBSTITUTE(B2,”,",))+1

公式第一部分LEN(B2)用于计算B2单元格中的字符数。

公式第二部分先用SUBSTITUTE函数将B2单元格中的逗号“,”替换为空文本,等于将所有逗号“,”从原始文本中删除,再用LEN函数计算替换后的文本字符数。

最后用第一部分的原始字符数减去逗号“,”被删数后的字符数,即得到原始字符串中一共有几个逗号“,”。由于每个单元格中的人数总是比逗号数量多一个,因此,最后再在公式中加1,即得到每个部门的人数。

例:借助SUBSTITUTE函数提取产品批号中的工厂码

下图为某公司产品的批号,其格式为字母数字的组合,中间用“_”分隔不同的信息。其中第二个和第三个“_”之间的内容为产品的工厂码,需要将其提取至B列。

在B2单元格中输入以下公式,向下复制到B5单元格。

=TRIM(MID(SUBSTITUTE(A2,"-",REPT(” ",99)),99*2,99))

REPT函数将指定文本重复多次组成字符串,基本语法如下。

REPT(text,number_times)

第一参数text为需要重复的内容,可以是字符串或单元格引用

第二参数number_times为将第一参数重复的次数。

公式中REPT(“ "99)的作用是生成99个空格。

用SUBSTITUTE函数将A2单元格中的“_”替换为99个空格。这里用99个空格的目的是将原始字符中的各段文本用足够多的空格分开构成新的字符串。新的字符串相当于如下。

DSF (99个空格) 25 (99个空格) D24 (99个空格) 50

因为要提取的字符在原始文本的第3段,所以用MID函数在以上字符串中第99*2个字符开始,提取99个字符,返回的结果相当于如下字符串。

(9个空格) D24 (87个空格)

最后再用TRIM函数清除文本两端多余的空格,即得到需要的工厂码。

二、用REPLACE函数替换字符串

REPLACE函数用于将部分文本字符串替换为新的字符串,与SUBSTITUTE函数的区别是,SUBSTITUTE函数是针对字符串中的指定字符内容进行替换,REPLACE函数是针对符串中的指定字符位置进行替换,其语法如下:

REPLACE(old_text,start_num,num_chars,new_text)

第一参数old_text表示要替换其部分字符的源文本。

第二参数start_num指定源文本中要替换为新字符的位置。

第三参数num_chars表示使用新字符串替换源字符串中的字符数,如果该参数为0或省略参数值,可以实现类似插入字符(串)的功能。

第四参数new_text表示用于替换源文本中字符的文本。

例:使用REPLACE函数隐藏手机号码中间4位

在下图中需要将B列手机号码中间4位数字用星号“****”隐藏。

在C2单元格中输入以下公式,向下复制到C10单元格。

=REPLACE(B2,4,4,”****”)

公式中使用REPLACE函数从B2单元格的第4个字符起,将4个字符替换为“****”

例:使用REPLACE函数将银行卡号分段显示

下图为某单位客户收款的银行卡号,为便于读取和核对,需要将银行卡号数字分段显示。

在B2单元格中输入以下公式,向下复制到B10单元格.

=REPLACE(REPLACE(REPLACE(REPLACE(A2,5,0," "),10,0," "),15,0," "),20,0," ")

REPLACE函数第三参数为0表示插入字符。公式中使用了四次REPLACE函数,第一次先用REPLACE函数在A2单元格第5个字符前插入一个空格。生成的新字符串再作为第二个REPLACE函数的第一参数,在新字符串的第10个字符前再次插入一个空格。依此类推,形成每四个数字为一组的分段显示方式。

三、用CLEAN函数和TRIM函数清理非打印字符和多余空格

部分从网页、ERP系统或从其他软件中导出的文本会存在一些非打印字符,影响正常数据查找及汇总计算。此外,由于数据录入时的疏忽,可能会在英文单词或中文姓名之间入多个空格。

CLEAN函数用于删除文本中的部分非打印字符(ASCII码的值为0~31)

使用TRIM函数能够清除文本中除了单词之间的单个空格外的所有空格。

它们的语法别为:

CLEAN(text)

TRIM(text)

四、使用NUMBERVALUE 函数转换不规范数字

在整理表格数据的过程中,经常会有一些不规范的数字影响数据的汇总分析。例如,在数字中混有空格,或者夹杂有全角数字及文本型数字等。对于文本数据,可以使用TRIM函数清理多余空格,使用ASC函数将全角字符转换为半角字符。对于数字内容,使用NUMBERVALUE函数可以兼容以上两种功能。

NUMBERVALUE函数较VALUE函数在功能上有一定的提升。该函数不仅可以实现VALUE函数日期转换为数值序列、文本型数字转换为数值型数字、全角数字转换为半角数字等功能,还可以处理混杂空格的数值及符号混乱等特殊情况。

对于“7430%”这样的数据,NUMBERVALUE函数能够将其转换为74.3而使用VALUE函数,则返回错误值#VALUE!。