30分钟入门正则(30分钟正则表达式)

http://www.itjxue.com  2023-01-28 06:14  来源:未知  点击次数: 

gvim匹配不包含属性的简单HTML标签内里的内容的正则表达式

可以将此问题先使用普通的正则式解出来:

(?=(\w+))[^]+(?=/\1)

拆分为:

positive lookbehind一个html开始标签,捕获其标签;

匹配任何非的内容,(作为正文部分,不支持嵌套;)

positive lookahead一个html结束标签,使用以前捕获的\1;

上述正则式在.Net正则引擎中通过。(perl/python的positive lookbehind里不支持像 \w+这样的不定量词)

将上述正则式翻译为vim正则,就是:(字面翻译)

\(\(\w\+\)\)\@=[^]\+\(\/\1\)\@=

其中的vim正则中的zero-width资料,可以在本贴的“参考资料”中找到。

有一个问题就是,前面的标签部分,即,\(\(\w\+\)\),又即原正则式中的((\w+))部分,第一重括号已经被零宽之后,里面的\1就无法被零宽之外的正则式所引用了。虽然,零宽内部可以使用外面的引用。

因此,您的需求并不能使用纯的vim正则来完美实现。这是vim正则的限制所在。每种正则引擎都有其限制。就我本人来说,我喜欢perl和python,不喜欢.Net语言,但是.Net的正则式是最强大的。当忠于一种语言,却不能使用该语言完成所需功能时,可以变通一下思路。

您的要求是,不包括前缀和后缀本身。想必您已经想到,变通的方法可以是这样:

普通正则:(\w+)([^]+)(/\1) ,其中,\2即为所求的不含标签的部分。

VIM正则:\(\w\+\)\([^]\+\)\/\1 ,其中,\2即为所求的不含标签的部分。GVIM7.2测试通过。

正则表达式论坛

正则表达式博客

正则表达式快速入门自用(基础中的基础)

参考视频:

正则表达式中的大多数元字符都以反斜杠开头

贪婪匹配:匹配结果尽可能多;

懒情匹配:匹配结果尽可能少

正则表达式30分钟入门 教程作者: deerchao

Regex tutorial一A quick cheatsheet by examples (英文)作者: Jonny Fox

Regular Expressions Tutorial (英文)

expressions.info/tutorial.html

0-200 或者0-30的正则表达式

var?a=/^(\d{1,2}|1\d{2}|200)$/;0到200的表达式

var?b=/^(\d{1,2}|[1,2]\d{2}|300)$/;0到300的表达式

附件为30分钟正则入门教程。确实不错。我当初就看的这个。哈哈哈

!/^[0-9]\d{5}$/ 解释!、/、^、&的意思,我已经知道这是正则表达式,想具体了解这几个符号的用法。

var val = FormName.name12.value;//取name12的值

if(val != "" !/^[0-9]\d{5}$/.test(val)){//如果val不等于(!=)空 并且() !/^[0-9]\d{5}$/正则验证val不通过 !是取反

//正则表达式解释 /正则开始 ^开始位置 $结束位置 /正则结束 意思是从字符开始验证到末尾

//[0-9]\d{5} 这个其实可以直接简写成 [0-9]{5} 就是匹配所有数字 并且是5个 其中 \d就是匹配所有数字 所以简写

alert("邮政编码填写有误!");//弹出提示框

FormName.name12.focus();//焦点在name12上

return false;//返回false

}

正则表达式中 (?=.*[a-z]) 什么意思?

意思是断言,只匹配一个位置。

例如:

想匹配一个“人”字,但是只想匹配中国人的人字,不想匹配法国人的人,就可以用一下表达式

(?=中国)人

所以,楼主的表达式与其他通配符连用才能起到效果。

(?=.*[a-z])\d+

这个就表示 匹配以“任意字符连着一个小写字母”开头的数字,只匹配数字。(?=exp)这个是放后面的。

扩展资料:

正则表达式的特点是:

1、灵活性、逻辑性和功能性非常强;

2、可以迅速地用极简单的方式达到字符串的复杂控制。

3、对于刚接触的人来说,比较晦涩难懂。

由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。

在Alteryx中使用Regex Expression 正则表达式

文:Lucia

参考文献链接:

【作者注:由于正则表达翻译的晦涩,这篇并不是完全逐字编译的文章,相当于结合原文案例和已有正则学习材料的基于自己表达的解说,特此说明】

——在Alteryx中使用Regex Expression 正则表达式

首先如果您不太了解正则表达式是什么的话,可以点击下面的30分钟快速入门正则表达式教程

?▼??????????????????????????????????????????????????????????????????????????????????????????????▼

?▲?????????????????????????????????????????????????????????????????????????????????????????????▲

简而言之,正则表达式已经是独立的一门语言,早已嵌入很多的分析工具中,Alteryx也不例外,这种常用于文本挖掘的抽象语言,不必死记硬背,就好比工具箱里的各种螺丝——用得上能解决需求就是了。

Let‘s Start——

?Alteryx用户可以在[Parse] 找到Regex?

对这个图标我们可以右键打开官方内置Example 【RegEx.yxmd】

下面是对Example里的设置进行的解读

1)Regex Match乃根据正则表达式指定的匹配规则返回是否匹配成功,即返回(True/False)

下图是在Address列中根据 *.-\d{4} 即指定匹配任意字符+”-“+任意四位数字规则的正则设置

2)Regex?Parse乃根据正则表达式指定的匹配规则截取字段成为新列

下图是在Name列中根据([a-z]+)\s([a-z]+) 即指定匹配任意字母+空格+任意字母的正则表达,截取第一段为First Name ,截取第二段为Last Name

3)Regex?Replace乃根据正则表达式指定的匹配规则把匹配的字符组按照自定义替换的规则进行替换

下图里是对Address栏里按照(.*), (.*), (.*)\s(\d{5})(-\d{4})?的规则(此处5个括号5个组)以$4:$2,$3为替换语言??? 去实现以第4组字符:第2组字符,第3组字符为内容的替换

4)Regex?Tokenize是根据正则表达式指定的匹配规则当作分隔关键字进行分栏/分列

下图里是对Address栏里按照[^,]+ 的规则,即配不含”,”的任意字符各自成组(SET)切成3列

Alteryx本身也会有一些提示语法藏在点击Regular

Expression旁的倒三角里

此外Alteryx 的Formula中也有正则应用函数

REGEX_CountMatches(string,pattern,icase)

REGEX_Match(string,pattern,icase)

REGEX_Replace(string,pattern, replace,icase)

看了官方内置案例后我们还是回到Alteryx Community 的Tool Mastery系列看看那边的大侠怎么解说alteryx里的正则表达式吧

先上吐槽漫画,论写正则的逼格

论写正则的过程

你可以视正则为另一门语言,它用符号的形式去匹配文本中一串字母字符数字,是一个对象型语言。

下面举个栗子

3345

Michelson Drive, Suite 400,?Irvine, CA 92612

12303

Airport Way, Suite 250, Broomfield, CO 80021

Two

North Riverside Plaza, Suite 1430, Chicago, IL 60606

在这个国外的地址模式里,哪一块是街道门牌哪一块城市哪一块是邮编老外一眼便知,但是对于计算机来说这些都是一大段文字,中间有些空格或者分隔符,它不会在乎这段文字是不是具备地址的特征。而正则表达式是一种方式去让计算机和我们去识别这些有用信息,下面我们把这段文字翻译成正则表达吧!

3345??? ? ? ? ? ? ? ? ? ? ?? ^ \d+ ??????? ^ 是正则里一行的开头,而 \d 代表任意数字(0-9) + 代表重复匹配1次以上,像是开头是数字的地址靠 ^ \d+ 就能匹配任意位数数字了 ,

Michelson Drive??????? [^ \d]+ ???????????? 非数字的匹配也就是数字的反义则是加 [^ ...] ,假设街道名不可能由数字构成,则直接加方括号[]行反义,即 [^ \d]+ 代表重复匹配1次以上任意非数字

Suite 400????????????????? .* ??????????? 由于不是每个地址里X单元是必需的,则 .* 代表可以匹配任意字符并重复 0 次以上

Irvine????????????????????????? [^ \d]+??????????? 同前匹配任意位数非数字了 ,

CA ???????????????????????????? \u{2}????????????? \u ? 是匹配任意大写字母,花括号里则是代表匹配的字符长度, \u{2} 代表匹配 2 位大写字母

92612 ??????????????????????? \d{5}$??????????? \d{5}$ 是匹配5位数字 $ 代表匹配当前文本的末尾

?正则还是有很多符号组成的,所幸Alteryx还是提供了一些常见的“密码本“在REGEX工具的倒三角下拉框里

作为用户的您真的没有必要围着正则表达的条条框框,因为正则的确千变万化,在alteryx里你只需遵循写一个试一把的方式来摸索就是了

Alteryx提供了4种运用RegEx工具的方法:Match/Parse/Replace/Tokenize

下面上个不同于官方内置举例的较长正则来讲述alteryx里还会用到的正则语法

(?: ^ \d+)|(?:^\w+)\s[^\d]+,\s.*,\s[^\d]+,\s\u{2}\s\d{5}$

\s 是匹配单个空格

| 是代表or

(?: ^\d+ )是匹配但不捕获任意位数数字,不分配组号

(?: ^\w+ )是匹配但不捕获任意位数的字符汉字数字下划线,不分配组号

Match

Regex Match 根据正则表达式指定的匹配规则返回是否匹配成功,即返回(True/False)

像?(?:^\d+)|(?:^\w+)\s[^\d]+,\s.*,\s[^\d]+,\s\u{2}\s\d{5}$在第三行那个例子中能匹配为True就是靠(?:^\d+)|(?:^\w+)的写法,否则单纯靠(?:^\d+)的规则则会返回False,我们考虑一个好的正则的写法是有远见的精准而不是限制死的错杀,像第三行的例子里的Two 和阿拉伯数字2这样,用or这样的运算符,它会先对前置的(?:^\d+)进行匹配,没匹配上再对后置的(?:^\w+)进行匹配

Parse

Regex?Parse根据正则表达式指定的匹配规则截取字段成为新列

Replace

Regex?Replace根据正则表达式指定的匹配规则把匹配的字符组按照自定义替换的规则进行替换

下图里是对Address栏里按照

1?????????????? 2???????????????? 3???????????? 4??????????? 5???????????????? 6

((?:^\d+)|(?:^\w+))\s([^\d]+),\s.(*,)\s([^\d]+),\s(\u{2})\s(\d{5}$)的规则(此处6个一级括号亦代表6个组)以$4,$5为替换语言??? 去实现以第4组字符:第5组字符为内容的替换

?Regex Replace 的写法灵活,你也可以用Formula里的RegEx_Replace来实现效果

Tokenize

Regex?Tokenize是根据正则表达式指定的匹配规则当作分隔关键字进行分栏/分列

Alteryx中本也有Text to column的工具,不过Regex Tokenize 与之相比灵活在可以匹配反义,或是匹配但不捕获的无视方法,来有选择写入需要的字符

下面与之前官方例子中的[^,]+ 规则相同但是用匹配不捕获的无视的写法

( .+? ) (?: , |$)

捕获任意位数字符但尽可能少重复,直到匹配到逗号或者文本末尾时放手无视

+? 是正则里的一种懒惰限定符(亲可以点文章开头的30分钟入门,去看贪婪和懒惰部分)

?当然也有因为写了?重复匹配0次或1次而没出现分隔效果的情况如上图

(责任编辑:IT教学网)

更多

推荐综合特效文章