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

前端之家收集整理的这篇文章主要介绍了如何学习正则表达式?总结一个分类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

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


@H_404_6@

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

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

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

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

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

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

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

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

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

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

  

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

['foo2']

['foo1','foo2']

  >>> m=re.search("foo.$","foo1\nfoo2\n")

  >>> 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()方法中举例讲解

猜你在找的正则表达式相关文章