正则表达式转换工具,正则表达式工具下载

http://www.itjxue.com  2023-01-20 00:53  来源:未知  点击次数: 

文字 编码 正则表达式 切换

这样的写法像是正则表达式,用来以unicode编码表示“宋体新宋体”这五个汉字。

转码方法很多,下载一份unicode码表肉眼去看可以,编个程序转换也行,另外推荐如下两个办法:

1、下载一个叫做codeview.exe的小工具,在其UTF16-BE编码中输入5B8B4F5365B05B8B4F53(不要\u),即可在文本串中看到那五个对应的汉字

2、打开word,逐一选中4个十六进制字符串,如5B8B、4F53、65B0等,按组合键ALT+X,即可将unicode编码转为汉字,再按ALT+X,将转换回来。

正则表达式

main role="main" class="App-main" style="padding-bottom: 46px;"

首发于 Python办公自动化

无障碍 写文章

登录

article class="Post-Main Post-NormalMain" tabindex="-1" style="box-sizing: border-box; outline: none;"

header class="Post-Header" style="margin: 0px auto; width: 690px;"

第一小乔乔

进一步,是一步。一起工作进步,厨艺精进,生活美满。

22 人赞同了该文章

/header

[图片上传失败...(image-f7fc00-1650193970962)]

match()和search()都只匹配出一个符合条件的字符串,若想要所有,可以使用re.findall()

# 用[]{}判断密码是否符合要求 :密码是由数字和字母组成,并且位数是6-16位

##用split按-或者空白格分割字段

结果:['ahsb1sssa8', 'jjhd7nhs', '90nsjhf3', '4hh', 'h7', '8kjj', 'sfav']

#用sub替换符合条件的关键词, 试试马赛克脏话(想起农药不能痛骂队友的愤怒)

##练练转义

## findall返回符合表达式的子串

一、正则表达式语法

正则表达式是用匹配或者描述字符串的工具。

用处:

a.判断字符串是否满足某个条件---判断输入的字符串是否是邮箱/手机号码。是否是ip地址

b.提取满足条件的字符串

c.字符串替换

Python中通过re模块中相应的方法来支持正则表达式的匹配、查找和替换等功能

fullmatch(正则表达式字符串, 字符串) --- 判断正则表达式和字符串是否完全匹配

正则表达式字符串: 就是一个字符串,字符串中是正则表达式语法。r'正则表达式'

正则表达式中包含两个部分,一个是正则语法对应的字符,二个是普通字符

1 .(点)(匹配任意字符)

一个.只匹配一个任意字符

2 \w(匹配字母数字下划线)

一个\w匹配一个字符

3 \s(匹配任意空白字符)

空白字符: 空格、制表符(\t)、回车(换行\n)等,都输入空白字符

一个\s匹配一个空白字符

4 \d(匹配数字字符)

一个\b不会去匹配一个字符,而是单纯的检测\b出现的位置是否是单词边界

单词边界: 字符串开始和结尾、空格、换行、标点符号等,可以将两个单词隔开的字符都单词边界

6 ^(检测是否是字符串开头)

re_str = r'^\d\d\d' # 判断一个字符串是否是三个数字开头

7 $(检测是否是字符串结尾)

8 \W(匹配非字母、数字下划线)

9 \S(匹配非空白字符)

10 \D(匹配非数字字符)

11 \B(检测是否不是单词边界)

12 [] (匹配中括号中出现的任意一个字符)

一个[]匹配一个字符

[字符集] -- 匹配一个字符,这字符是字符集中的任意一个字符

例如:[abc], [\d+]

[字符1-字符2] -- 匹配一个字符,这个字符是Unicode编码值在字符1到字符2中的任意一个字符;要求字符1的编码值要小于字符2

例如:[1-9] -- 数字1到9 [a-z] -- 小写字母 [A-Z] -- 大写字母

[\u0031-\u0039] -- 数字1到9

[\u4E00-\u9fa5] -- 匹配所有的汉字

注意:-在中括号中,如果放在两个字符之间表示范围。

13 [^字符集] (匹配一个不在字符集中的任意字符)

注意:^必须放在中括号中的最前面才有效

二、正则表达式次数相关符号

from re import fullmatch

1. *(匹配0次或者多次)

字符* -- 字符出现0次或者多次

2. +(匹配一次或者多次)

3. ?(匹配0次或者1一次)

练习:写一个正则表达式,匹配所有的整数(123, -2334, +9...可以匹配的,012, -023,+0122不能匹配)

{N} -- 匹配N次

{M,N} -- 匹配M到N次

{M,} -- 至少匹配M次

{,N} -- 最多匹配N次

三、分之和分组

import re

1. |(分之)

条件1|条件2 -- 先用条件1去匹配,如果匹配成功就匹配成功。如果条件1匹配失败,用条件2去匹配。

注意:如果条件1匹配成功就不会用条件2再去匹配

能匹配成功时abc,d和aaa

'abc'+W/H/Y

2. ()(分组)

a.组合(将括号中的内容作为一个整体进行操作)

b.捕获 -- 使用带括号的正则表达式匹配成功后,只获取括号中的内容

c.重复 -- 在正则表达式中可以通过\数字来重复前面()中匹配到的结果。数字代表前第几个分组

a.组合

匹配一个字符串,以数字字母的组合出现3次

b.捕获

c.重复

3.转义符号

正则表达式中可以通过在特殊的符号前加\,来让特殊的符号没有意义

. -- 任意字符 . -- 字符.

注意:在中括号有特殊功能的符号,只代表符号本身

\不管在哪儿都需要转义

-在[]外面没有特殊功能,在[]中要表示-本身,就不要放在两个字符之间

()需要转义

四、re模块中的函数

import re

1. compile

compile(正则表达式字符串) -- 将正则表达式字符串转换成正则表达式对象

2. fullmatch和match

fullmatch(正则表达式字符串, 字符串)

-- 用正则表达式去完全匹配字符串(匹配整个字符串),返回匹配对象(SRE_Match)或者None

match(正则表达式字符串, 字符串)

-- 匹配字符串开头,返回匹配对象或者None

1.span(group=0) -- 获取匹配成功的区间(左闭右开区间)

print(result.span(0))

print(result.start(1)) # 获取匹配到的开始下标

print(result.end(1)) # 获取匹配到的结束下标后的下标

2.group(group = 0) -- 获取匹配结果

group()/group(0) -- 获取正则表达式完全匹配的结果

group(index0) -- 获取正则表达式中第group个分组匹配到的结果

3.string -- 获取被匹配的原字符串

3.search

search(正则表达式, 字符串)

-- 查找字符串中满足正则表达式的第一个字符串。返回值是匹配对象或者None

练习:使用search匹配出一个字符串中所有的数字字符串'abc34jshd8923jkshd9lkkk890k' -- 34,8923,9,890

4.findall

findall(正则表达式, 字符串) -- 获取字符串中满足正则表达式的所有的子串,返回一个列表

注意:如果正在表达式中有分组,取值的时候只取分组中匹配到的结果;

如果有多个分组,会将每个分组匹配到的结果作为一个元祖的元素

5.finditer

finditer(正则表达式, 字符串)

-- 查找所有满足正则条件的子串,返回值是迭代器,迭代器中的元素是匹配对象

6. split

split(正则表达式,字符串) -- 将字符串按照满足正则表达式条件的子串进行分割

"""

str1 = 'ahsb1sssa8-jjhd7nhs+90nsjhf3-4hhh7+8kjj-'

result = re.split(r'[-+]', str1)

print(result)

7.sub

sub(正则表达式,repl,字符串) -- 将字符串中满足正则表达式条件的子串替换成repl。返回替换后的字符串

作业

1. 写一个正则表达式判断一个字符串是否是ip地址

规则:一个ip地址由4个数字组成,每个数字之间用.连接。每个数字的大小是0-255 例如:255.189.10.37 正确 256.189.89.9 错误

2. 计算一个字符串中所有的数字的和

例如:字符串是:‘hello90abc 78sjh12.5’ 结果是90+78+12.5 = 180.5

3. 验证输入的内容只能是汉字

4. 电话号码的验证

二、不定项选择题

编辑于 2020-12-21 17:02

Python

正则表达式

赞同 22

3 条评论

分享

/article

[图片上传失败...(image-b1d3-1650193970960)]

懒人必备

[[图片上传失败...(image-645a0f-1650193970961)]

裸睡的猪发表于猪哥的Py...]( )

[# 【Python】正则表达式基础知识

正则表达式(regular expression)是一种处理字符串的工具,功能十分强大。正则表达式使用预定义的特定模式去匹配一类具有共同特征的字符串,主要用于字符串处理,可以快速,准确地完成复杂…

长弓瑾瑜]( )

[[图片上传失败...(image-c617e9-1650193970961)]

123456]( )

[# Python之正则表达式入门

前言:此文实际上是本人在慕课学习北京理工大学课程:Python网络爬虫与信息提取 一课所做的一部分笔记,是作为初学者的入门笔记,自然有许多遗漏或者疏忽,欢迎大家指出。一、正则表达式基…

热水]( )

切换为时间排序

写下你的评论...

label class="UploadPicture-wrapper" style="cursor: pointer;"/label

发布

/main

label class="Editable-languageSuggestionsInput Input-wrapper" style="position: relative; display: flex; -webkit-box-align: center; align-items: center; width: 180px; height: 34px; padding: 4px 10px; font-size: 14px; background: rgb(255, 255, 255); border: 1px solid rgb(235, 235, 235); border-radius: 3px; box-sizing: border-box; transition: background 0.2s ease 0s, border 0.2s ease 0s; cursor: pointer;"input autocomplete="off" role="combobox" aria-expanded="false" aria-autocomplete="list" aria-activedescendant="AutoComplete17-0" id="Popover16-toggle" aria-haspopup="true" aria-owns="Popover16-content" class="Input" placeholder="选择语言" value="" style="-webkit-box-flex: 1; flex: 1 1 0%; padding: 0px; overflow: hidden; font-family: inherit; font-size: inherit; font-weight: inherit; background: transparent; border: none; resize: none; color: rgb(18, 18, 18); height: 24px; line-height: 24px; cursor: inherit;"/label

如何使用正则表达式

在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。

可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛。

正则表达式的引擎已被许多普通的Unix工具所实现,包括grep,awk,vi和Emacs等。此外,许多使用比较广泛的脚本语言也支持正则表达式,比如Python,Tcl,JavaScript,以及最著名的Perl。

我很早以前就是个Perl方面的黑客,如果你和我一样话,你也会非常依赖你手边的这些强大的text-munging工具。近几年来,像其他程序开发者一样,我也越来越关注Java的开发。

Java作为一种开发语言,有许多值得推荐的地方,但是它一直以来没有自带对正则表达式的支持。直到最近,借助于第三方的类库,Java开始支持正则表达式,但这些第三方的类库都不一致、兼容性差,而且维护代码起来很糟糕。这个缺点,对我选择Java作为首要的开发工具来说,一直是个巨大的顾虑之处。

你可以想象,当我知道Sun的Java JDK 1.40版本包含了java.util.regex(一个完全开放、自带的正则表达式包)时,是多么的高兴!很搞笑的说,我花好些时间去挖掘这个被隐藏起来的宝石。我非常惊奇的是,Java这样的一个很大改进(自带了java.util.regex包)为什么不多公开一点呢?!

最近,Java双脚都跳进了正则表达式的世界。java.util.regex包在支持正则表达也有它的过人之处,另外Java也提供详细的相关说明文档。使得朦朦胧胧的regex神秘景象也慢慢被拨开。有一些正则表达式的构成(可能最显著的是,在于糅合了字符类库)在Perl都找不到。

在regex包中,包括了两个类,Pattern(模式类)和Matcher(匹配器类)。Pattern类是用来表达和陈述所要搜索模式的对象,Matcher类是真正影响搜索的对象。另加一个新的例外类,PatternSyntaxException,当遇到不合法的搜索模式时,会抛出例外。

即使对正则表达式很熟悉,你会发现,通过java使用正则表达式也相当简单。要说明的一点是,对那些被Perl的单行匹配所宠坏的Perl狂热爱好者来说,在使用java的regex包进行替换操作时,会比他们所以前常用的方法费事些。

本文的局限之处,它不是一篇正则表达式用法的完全教程。如果读者要对正则表达进一步了解的话,推荐阅读Jeffrey Frieldl的Mastering Regular Expressions,该书由O’Reilly出版社出版。我下面就举一些例子来教读者如何使用正则表达式,以及如何更简单地去使用它。

设计一个简单的表达式来匹配任何电话号码数字可能是比较复杂的事情,原因在于电话号码格式有很多种情况。所有必须选择一个比较有效的模式。比如:(212) 555-1212, 212-555-1212和212 555 1212,某些人会认为它们都是等价的。

首先让我们构成一个正则表达式。为简单起见,先构成一个正则表达式来识别下面格式的电话号码数字:(nnn)nnn-nnnn。

第一步,创建一个pattern对象来匹配上面的子字符串。一旦程序运行后,如果需要的话,可以让这个对象一般化。匹配上面格式的正则表达可以这样构成:(\d{3})\s\d{3}-\d{4},其中\d单字符类型用来匹配从0到9的任何数字,另外{3}重复符号,是个简便的记号,用来表示有3个连续的数字位,也等效于(\d\d\d)。\s也另外一个比较有用的单字符类型,用来匹配空格,比如Space键,tab键和换行符。

是不是很简单?但是,如果把这个正则表达式的模式用在java程序中,还要做两件事。对java的解释器来说,在反斜线字符(\)前的字符有特殊的含义。在java中,与regex有关的包,并不都能理解和识别反斜线字符(\),尽管可以试试看。但为避免这一点,即为了让反斜线字符(\)在模式对象中被完全地传递,应该用双反斜线字符(\)。此外圆括号在正则表达中两层含义,如果想让它解释为字面上意思(即圆括号),也需要在它前面用双反斜线字符(\)。也就是像下面的一样:

\\(\\d{3}\\)\\s\\d{3}-\\d{4}

现在介绍怎样在java代码中实现刚才所讲的正则表达式。要记住的事,在用正则表达式的包时,在你所定义的类前需要包含该包,也就是这样的一行:

import java.util.regex.*;

下面的一段代码实现的功能是,从一个文本文件逐行读入,并逐行搜索电话号码数字,一旦找到所匹配的,然后输出在控制台。

BufferedReader in;

Pattern pattern = Pattern.compile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}");

in = new BufferedReader(new FileReader("phone"));

String s;

while ((s = in.readLine()) != null)

{

Matcher matcher = pattern.matcher(s);

if (matcher.find())

{

System.out.println(matcher.group());

}

}

in.close();

对那些熟悉用Python或Javascript来实现正则表达式的人来说,这段代码很平常。在Python和Javascript这些语言中,或者其他的语言,这些正则表达式一旦明确地编译过后,你想用到哪里都可以。与Perl的单步匹配相比,看起来多多做了些工作,但这并不很费事。

find()方法,就像你所想象的,用来搜索与正则表达式相匹配的任何目标字符串,group()方法,用来返回包含了所匹配文本的字符串。应注意的是,上面的代码,仅用在每行只能含有一个匹配的电话号码数字字符串时。可以肯定的说,java的正则表达式包能用在一行含有多个匹配目标时的搜索。本文的原意在于举一些简单的例子来激起读者进一步去学习java自带的正则表达式包,所以对此就没有进行深入的探讨。

这相当漂亮吧! 但是很遗憾的是,这仅是个电话号码匹配器。很明显,还有两点可以改进。如果在电话号码的开头,即区位号和本地号码之间可能会有空格。我们也可匹配这些情况,则通过在正则表达式中加入\s?来实现,其中?元字符表示在模式可能有0或1个空格符。

第二点是,在本地号码位的前三位和后四位数字间有可能是空格符,而不是连字号,更有胜者,或根本就没有分隔符,就是7位数字连在一起。对这几种情况,我们可以用(-|)?来解决。这个结构的正则表达式就是转换器,它能匹配上面所说的几种情况。在()能含有管道符|时,它能匹配是否含有空格符或连字符,而尾部的?元字符表示是否根本没有分隔符的情况。

最后,区位号也可能没有包含在圆括号内,对此可以简单地在圆括号后附上?元字符,但这不是一个很好的解决方法。因为它也包含了不配对的圆括号,比如"(555" 或 "555)"。相反,我们可以通过另一种转换器来强迫让电话号码是否带有有圆括号:(\(\d{3}\)|\d{3})。如果我们把上面代码中的正则表达式用这些改进后的来替换的话,上面的代码就成了一个非常有用的电话号码数字匹配器:

Pattern pattern =

Pattern.compile("(\\(\\d{3}\\)|\\d{3})\\s?\\d{3}(-|)?\\d{4}");

可以确定的是,你可以自己试着进一步改进上面的代码。

现在看看第二个例子,它是从Friedl的中改编过来的。其功能是用来检查文本文件中是否有重复的单词,这在印刷排版中会经常遇到,同样也是个语法检查器的问题。

匹配单词,像其他的一样,也可以通过好几种的正则表达式来完成。可能最直接的是\b\w+\b,其优点在于只需用少量的regex元字符。其中\w元字符用来匹配从字母a到u的任何字符。+元字符表示匹配匹配一次或多次字符,\b元字符是用来说明匹配单词的边界,它可以是空格或任何一种不同的标点符号(包括逗号,句号等)。

现在,我们怎样来检查一个给定的单词是否被重复了三次?为完成这个任务,需充分利用正则表达式中的所熟知的向后扫描。如前面提到的,圆括号在正则表达式中有几种不同的用法,一个就是能提供组合类型,组合类型用来保存所匹配的结果或部分匹配的结果(以便后面能用到),即使遇到有相同的模式。在同样的正则表达中,可能(也通常期望)不止有一个组合类型。在第n个组合类型中匹配结果可以通过向后扫描来获取到。向后扫描使得搜索重复的单词非常简单:\b(\w+)\s+\1\b。

圆括号形成了一个组合类型,在这个正则表示中它是第一组合类型(也是仅有的一个)。向后扫描\1,指的是任何被\w+所匹配的单词。我们的正则表达式因此能匹配这样的单词,它有一个或多个空格符,后面还跟有一个与此相同的单词。注意的是,尾部的定位类型(\b)必不可少,它可以防止发生错误。如果我们想匹配"Paris in the the spring",而不是匹配"Java's regex package is the theme of this article"。根据java现在的格式,则上面的正则表达式就是:Pattern pattern =Pattern.compile("\\b(\\w+)\\s+\\1\\b");

最后进一步的修改是让我们的匹配器对大小写敏感。比如,下面的情况:"The the theme of this article is the Java's regex package.",这一点在regex中能非常简单地实现,即通过使用在Pattern类中预定义的静态标志CASE_INSENSITIVE :

Pattern pattern =Pattern.compile("\\b(\\w+)\\s+\\1\\b",

Pattern.CASE_INSENSITIVE);

有关正则表达式的话题是非常丰富,而且复杂的,用Java来实现也非常广泛,则需要对regex包进行的彻底研究,我们在这里所讲的只是冰山一角。即使你对正则表达式比较陌生,使用regex包后会很快发现它强大功能和可伸缩性。如果你是个来自Perl或其他语言王国的老练的正则表达式的黑客,使用过regex包后,你将会安心地投入到java的世界,而放弃其他的工具,并把java的regex包看成是手边必备的利器。

正则表达式工具介绍 它有什么功能

1、正则表达式工具 Match Tracer 是一款用来编写和测试正则表达式的工具软件。本软件通过可视化的界面,可以协助你快速、正确地写出复杂的正则表达式。

2、主要功能:根据正则表达式语法,彩色显示表达式,使表达式便于阅读。

3、同步将正则表达式的组成显示在 树结构 和 分组列表 中,使正则表达式结构一目了然。

4、详细记录每一个匹配结果,包含分组结果以及所花费的时间。

5、可进行忽略大小写,单行模式,多行模式,全局模式,从左右,扩展模式等模式下的正则表达式测试。

6、可单独测试表达式中的一部分,有利于分段调试复杂的正则表达式。

7、您可以设置一个匹配起始点,方便排查表达式错误。

8、支持高级正则语法,例如递归匹配等。

9、可以保存文本片段,例如表达式或者其他文本,也可以跟任意其他编辑器之前相互拖动。

10、可以保存当前表达式为一个‘快照’,使您可以放心改写表达式。

正则表达式概述 什么是正则表达式

正则表达式概述

正则表达式在程序设计语言中存在着广泛的应用,特别是用来处理字符串。如匹配字符串、查找字符串、替换字符串等。可以说,正则表达式是一段文本或一个公式,它是用来描述用某种模式去匹配一类字符串的公式,并且该公式具有一定的模式。

本小节将介绍正则表达式的基本概念、第一个正则表达式,以及测试正则表达式的工具Code Architects Regex Tester。

什么是正则表达式

正则表达式(Regular

Expression)起源于人类神经系统的早期研究。神经生理学家Warren McCulloch和Walter

Pitts研究出一种使用数学方式描述神经网络的方法。1956年,数学家Stephen

Kleene发表了一篇标题为“神经网事件的表示法”的论文,并在该论文中引入了“正则表达式”这一个概念。该论文称正则表达式是:“正则集的代数”的表达式。因此,采用“正则表达式”这个术语。正则表达式的定义存在多种说法,具体如下:

正则表达式就是用某种模式去匹配一类字符串的公式,主要用来描述字符串匹配的工具。

正则表达式描述了一种字符串匹配的模式。它可以用来检查字符串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

正则表达式是由普通字符(如字符a到z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

正则表达式就是用于描述某些规则的工具。这些规则经常用于处理字符串中的查找或替换字符串。换句话说,正则表达式就是记录文本规则的代码。

正则表达式就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。

学过《编译原理》的读者可能知道不确定有限自动机(Non-deterministic

finite automaton,简称NFA)和确定有限自动机(Deterministic finite

automaton,简称DFA)。其实,正则表达式是一个不确定有限自动机。NFA和DFA的最大区别在于它们的状态转换函数。NFA可以对同一个字符串产生多种理解方式,而DFA则只有唯一的一种理解方式。也正因为如此,NFA在匹配过程中可能会回溯,NFA的效率一般要低于DFA。因此,在书写正则表达式时尽量减少回溯来提高正则表达式的效率。

如果你使用过Windows或DOS下用于文件查找的通配符*和?,那么你不难理解正则表达式。如果你需要查找所有Word文档,那么可能使用表达式*.doc。其中,字符*是一个通配符,它可以代表任意字符串。正则表达式和通配符具有相似性,它也可以使用一些字符(如字符.)表示任意字符。然而,它比通配符更具有精确性。

在正则表达式中,匹配是最常用的一个词语,它描述了正则表达式动作结果。给定一段文本或字符串,使用正则表达式从文本或字符串中查找出符合正则表达式的字符串。有可能文本或字符存在不止一个部分满足给定的正则表达式,这时每一个这样的部分被称为一个匹配。其中,匹配存在下面3种类型:

形容词性的匹配,即一个字符串匹配一个正则表达式。

动词性的匹配,即在文本或字符串里匹配正则表达式。

名词性的匹配,即字符串中满足给定的正则表达式的一部分。

正则表达式的应用非常广泛,特别是在字符串处理方面。目前来说,正则表达式已经在很多软件中得到广泛了应用,如Linux、Unix、HP等操作系统,C#、PHP、Java等程序开发环境,以及很多的应用软件中,都可以看到正则表达式的这样或那样的应用。正则表达式常见的应用如下:

验证字符串,即验证给定的字符串或子字符串是否符合指定特征,譬如验证是否是合法的邮件地址、验证是否为合法的HTTP地址等。

查找字符串,从给定的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。

替换字符串,即把给定的字符串中的符合指定特征的子字符串替换为其他字符串,比普通的替换更强大。

提取字符串,即从给定的字符串中提取符合指定特征的子字符串。

(责任编辑:IT教学网)

更多

推荐Flash实例教程文章