加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式

发布时间:2020-12-14 06:19:09 所属栏目:百科 来源:网络整理
导读:正则表达式 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。 下图提供了正则表达式的简介写法: 1. 通配符 ?与 * ? 通配符匹配文件名中的 0 个或 1 个字符; 通配符匹配零个或多个字

正则表达式

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。

下图提供了正则表达式的简介写法:

1. 通配符 ?与 *

  • ? 通配符匹配文件名中的 0 个或 1 个字符;
    • 通配符匹配零个或多个字符。

ps: 使用 * 字符代替 ? 字符扩大了找到的文件的数量。

2. ^,+,$与.

  • ^为匹配输入字符串的开始位置。
    • 的作用是将前面一个字符或一个子表达式重复一遍或者多遍。,[0-9]+匹配多个数字, [0-9] 匹配单个数字
  • abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。
  • .字符在正则表达式代表着可以代表任何一个字符(包括它本身)

例:^[0-9]+abc$就是匹配数字开头,abc结尾的字符串

var str = "123abc";
var patt1 = /^[0-9]+abc$/;
document.write(str.match(patt1));

例:

import re
key = r"ababbbbcadsdf"
p1 = r"ab+"
pattern1 = re.compile(p1)
print pattern1.findall(key)

输出结果为:

[‘ab‘,‘abbbb‘]

即:按顺序从左往右匹配,+是前面一个字符(b)匹配一次或者多次。

3. 匹配.本身~转义字符:

这个符号通常用来把特殊的符号转成普通的。

例:

import re
key = r"[email?protected]"
p1 = r"[email?protected].edu.cn"
pattern1 = re.compile(p1)
print pattern1.findall(key)

findall返回的是所有符合要求的元素列表,包括仅有一个元素时,它还是给你返回的列表。

输出结果为:

[‘[email?protected]‘]

我们在.的前面加上了转义符,而是只匹配“.”的意思!

4. *跟在其他符号后面表达可以匹配到它0次或多次

例如:网页内遇到了链接,可能既有http://开头的,又有https://开头的,我们怎么处理?

import re
key = r"http://www.nsfbuhwe.com and https://www.auhfisna.com"
p1 = r"https*://"#看那个*!
pattern1 = re.compile(p1)
print pattern1.findall(key)

输出结果为:

[‘http://‘,‘https://‘]

5. []代表匹配里面的字符中的任意一个

例如:

import re
key = r"lalala<heLLo>hello</HellO>heiheihei"
p1 = r"<[Hh][Ee][Ll][Ll][Oo]>.+?</[Hh][Ee][Ll][Ll][Oo]>"
pattern1 = re.compile(p1)
print pattern1.findall(key)

输出结果为:

[‘<heLLo>hello</HellO>‘]

6. [^]代表除了内部包含的字符以外都能匹配

例:现在有cat,hat,mat,qat,想要匹配所有的: 则:

import re
key = r"mat cat hat qat"
p1 = r"[a-z]*at"
pattern1 = re.compile(p1)
print pattern1.findall(key)

输出结果为:

[‘mat‘,‘cat‘,‘hat‘,‘qat‘]

若上例重要匹配除qat以外的,则:

import re
key = r"mat cat hat qat"
p1 = r"[^q]at"#这代表除了p以外都匹配
pattern1 = re.compile(p1)
print pattern1.findall(key)

输出结果为:

[‘mat‘,‘hat‘]

7. 贪婪模式

例:我想匹配到@后面一直到“.”之间的,在这里是china 即@china.

import re
key = r"[email?protected]"
p1 = r"@.+."
pattern1 = re.compile(p1)
print pattern1.findall(key)

但是结果却是这样:

[‘@china.edu.‘]
  • 因为正则表达式默认是“贪婪”的,我们之前讲过,“+”代表是字符重复一次或多次。但是我们没有细说这个多次到底是多少次。所以它会尽可能“贪婪”地多给我们匹配字符,在这个例子里也就是匹配到最后一个“.”。
  • 那么,怎么才能匹配到想要的结果呢? “?”是也

8. 只要在“+”后面加一个“?”就变成了懒惰模式,匹配尽可能少的。

import re
key = r"[email?protected]"
p1 = r"@.+?."#我想匹配到@后面一直到“.”之间的,在这里是hit
pattern1 = re.compile(p1)
print pattern1.findall(key)

此时输出结果为:

[‘@china.‘]

小结

先写到这里,后面在学习中遇到再补充进来。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读