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

如何学习正则表达式?总结一个分类

发布时间:2020-12-14 00:44:08 所属栏目:百科 来源:网络整理
导读:正则表达式能够把你想要的字符从一段字符串抓出来。那它是如何做到的呢? 1.要有一个匹配的字符。就是如果你想要a,你就写a,想要b,就写b。比如从‘abcdefg’里抓‘cde’,那么正则表达式就是‘cde’。简单吧。 但是,如果你想要的不是个明确的,比如从‘ab

正则表达式能够把你想要的字符从一段字符串抓出来。那它是如何做到的呢?

1.要有一个匹配的字符。就是如果你想要a,你就写a,想要b,就写b。比如从‘abcdefg’里抓‘cde’,那么正则表达式就是‘cde’。简单吧。

但是,如果你想要的不是个明确的,比如从‘abcd1234xyz’里面抓数字,可以使用表达匹配数字的字符d。

如下是匹配各种字符的正则表达式:

d 匹配任何十进制数;它相当于类 [0-9]。
D 匹配任何非数字字符;它相当于类 [^0-9]。
s 匹配任何空白字符;它相当于类 [ fv]。
S 匹配任何非空白字符;它相当于类 [^ fv]。
w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。


.表示任意字符
[]用来匹配一个指定的字符类别,所谓的字符类
别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系。
^ 如果放在字符串的开头,则表示取非的意思。[^5]表示除了5之外的其他字符。而如果^不在字符串的开头,则表示它本身。
元字符[^].你可以用补集来匹配不在区间范围内的字符。其做法是把"^"作为类别的首个字符;其它地方的"^"只会简单匹配 "^"字符本身。例如,[^5] 将匹配除 "5" 之外的任意字符。同时,在[ ]外,元字符^表示匹配字符串的开始,如"^ab+"表示以ab开头的字符串。

2 有时候正则表达式为‘aaaaa‘还可以写出来,但是可能是‘aaaaa‘或是‘aaa’,怎么办呢?那就需要重复功能的元字符了。

正则表达式的元字符有. ^ $ * ? { [ ] | ( )。各种意义下面讲,

其中,具有重复功能的元字符为;

* 对于前一个字符重复0到无穷次
+对于前一个字符重复1到无穷次

?对于前一个字符重复0到1次
{m,n} 对于前一个字符重复次数在为m到n次,其中,{0,} = *,{1,} =,{0,1} = ?
{m} 对于前一个字符重复m次

3。下面讲讲没有提到的元字符。不愿意自己写了,copy一下,其实很好理解

3. 元字符(),元字符backslash。做为 Python 中的字符串字母,反斜杠后面可以加不同的字符以表示不同特殊意义。

它也可以用于取消所有的元字符,这样你就可以在模式中匹配它们了。例如,如果你需要匹配字符 "[" 或 "",你可以在它们之前用反斜杠来取消它们的特殊意义: [ 或

4。元字符($)匹配字符串的结尾或者字符串结尾的换行之前。(在MULTILINE模式下,"$"也匹配换行之前)

正则表达式"foo"既匹配"foo"又匹配"foobar",而"foo$"仅仅匹配"foo".

  

 >>> re.findall("foo.$","foo1nfoo2n")#匹配字符串的结尾的换行符之前。

['foo2']

['foo1','foo2']

  >>> m=re.search("foo.$","foo1nfoo2n")

  >>> m

  <_sre.SRE_Match object at 0x00A27170>

  >>> m.group()

  'foo2'

  'foo1'

看来re.MULTILINE对$的影响还是蛮大的。

5.元字符(*),匹配0个或多个

6.元字符(?),匹配一个或者0个

7.元字符(+),匹配一个或者多个

8,元字符(|),表示"或",如A|B,其中A,B为正则表达式,表示匹配A或者B

9.元字符({})

{m},用来表示前面正则表达式的m次copy,如"a{5}",表示匹配5个”a”,即"aaaaa"

 >>> re.findall("a{5}","aaaaaaaaaa")

 ['aaaaa','aaaaa']

 ['aaaaa']


{m.n}用来表示前面正则表达式的m到n次copy,尝试匹配尽可能多的copy。

>>> re.findall("a{2,4}","aaaaaaaa")

 ['aaaa','aaaa']

通过上面的例子,可以看到{m,n},正则表达式优先匹配n,而不是m,因为结果不是["aa","aa","aa"]

>>> re.findall("a{2}",207)">  ['aa','aa','aa']

{m,n}?用来表示前面正则表达式的m到n次copy,尝试匹配尽可能少的copy   

 >>> re.findall("a{2,4}?",207)"> 10。元字符("( )" ),用来表示一个group的开始和结束。

比较常用的有(REs),(?P<name>REs),这是无名称的组和有名称的group,有名称的group,可以通过matchObject.group(name)

获取匹配的group,而无名称的group可以通过从1开始的group序号来获取匹配的组,如matchObject.group(1)。具体应用将在下面的group()方法中举例讲解

(编辑:李大同)

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

    推荐文章
      热点阅读