Python正则表达式(part2):如何正确使用转义字符?

2026-06-10 22:162阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1085个文字,预计阅读时间需要5分钟。

Python正则表达式(part2):如何正确使用转义字符?

文章目录+正则表达式的转换+正则表达式的转换+使用正则表达式进行匹配+如果使用正则表达式来匹配特定特殊字符(.+*?^$[](){}|),则需要在特殊字符前加上反斜杠[\]表示转义+表示转义。+例如1+In+re.find(正则表达式)


文章目录

  • ​​正则表达式的转义​​

正则表达式的转义

  • 如果使用正则表达式来匹配特殊字符(. * + ? ^ $ [] () {} | ),则需要在特殊符号前加上​​​​ 表示转义。

例子1

In : re.findall('-?\d+\.?\d*',"123,-123,1.23,-1.23")
Out: ['123', '-123', '1.23', '-1.23']

例子2

In :print(re.findall('\$\d+',"薪资:$100"))
Out: ['$100']
  • 在编程语言中,常使用原生字符串书写正则表达式避免多重转义的麻烦。

当我们使用re模块进行匹配时,我们输入一串python字符串,py先将python字符串解析为正则表达式,再利用正则表达式匹配目标字符串:

python字符串 --解析为-- > 正则表达式 --匹配-- > 目标字符串

​​\\$\\d+​​​ --解析为-- > ​​\$\d+​​​ --匹配-- > ​​$100​​

我们解释一下上面的表格的含义:如果我们用正则表达式匹配​​$100​​​,那么我们就要将正则表达式,以字符串的形式传给findall()做参数,那么我们如何写这个字符串来表达正则表达式呢?在字符串中我们遇到特殊字符(这里的特殊字符,是针对于python来说的特殊字符,比如​​​​​等等)也需要进行转义,所以我们可以用​​\\$\\d+​​​来表示正则表达式​​\$\d+​​。故,其实最正统的例子2中的写法应该是:

In : print(re.findall('\\$\\d+',"薪资:$100"))
Out: ['$100']

那为啥例子2中的写法也对了呢? 那是因为如果我们写成​​​​​,python会先经过字符串的转义解析,解析为​​​​​。而,我们例子2中的写法​​​​​,结果python无法识别。比如,对于​​​​​,由于python没有这么一个特殊字符,py无法识别,所以py就给我们原样解析了;同时,python也没有​​​​​这么一个特殊字符,所以,py也给我们原样解析了;而​​​​​本身就是​​​​​。所以最后,我们写成​​​​也能匹配$100.

比如之前一个例子:

In : print(re.findall(r'\bis\b', "This is XiaoHuang"))
Out: ['is'] #这里输出的is,是第二个is(两边都有空格的is)

若我们不在字符串前加​​​​时,python会得到什么样的结果呢?

In :print(re.findall('\bis\b', "This is XiaoHuang"))
Out: []

嗯!啥都没有~
这是为啥呢?
那是因为在python字符串中,存在特殊字符​​​​​​,表示退格。则若输入​​​​​,则python会解析为​​​​​,那么后面的字符串就不会被匹配。所以这里我们应该写成​​​​:

In : print(re.findall('\\bis\\b', "This is XiaoHuang"))
Out: ['is']

那么现在问题又来了! 如果我们现在想匹配​​​​​中的​​​​​,我们该怎么写呢???
注意:当我们利用py进行匹配时,被匹配的​​​​​也为python字符串,所以在python中应该写为:​​​​​。
这时,我们的正则表达式应该写成:​​​​,python字符串应该写成:​​​​:

In : print(re.findall('\\$\\d+\\\\\\d+',"薪资:$100\\200"))
Out: ['$100\\200']

匹配是匹配出来了,但是……WC, 这也太冗杂了。故我们引入了原生字符串。原生字符串是指,在字符串之前加一个​​​​​,使字符串内部所有可能会发生的转义,都不发生转义解析,即避免字符串内的所有转义解析。比如,在字符串前加了​​​​​之后,​​​​​就表示单纯的​​​​​,​​​​​就表示单纯的​​​​。我们在iPython内验证一下:

Python正则表达式(part2):如何正确使用转义字符?

In : r'\n'
Out: '\\n'

嗯!perfect!

因此,当我们用了原生字符串后,我们的正则表达式是什么样的,python字符串内,就可以写成什么样~
所以,我们上面的那个例子就可以写成:

In : print(re.findall(r'\$\d+\\\d+',r"薪资:$100\200"))
Out: ['$100\\200']

备注:原生字符串不仅仅在正则表达式中有应用,只要我们想保持原样的内容,不进行转义,都可以使用原生字符串。

标签:转义文章

本文共计1085个文字,预计阅读时间需要5分钟。

Python正则表达式(part2):如何正确使用转义字符?

文章目录+正则表达式的转换+正则表达式的转换+使用正则表达式进行匹配+如果使用正则表达式来匹配特定特殊字符(.+*?^$[](){}|),则需要在特殊字符前加上反斜杠[\]表示转义+表示转义。+例如1+In+re.find(正则表达式)


文章目录

  • ​​正则表达式的转义​​

正则表达式的转义

  • 如果使用正则表达式来匹配特殊字符(. * + ? ^ $ [] () {} | ),则需要在特殊符号前加上​​​​ 表示转义。

例子1

In : re.findall('-?\d+\.?\d*',"123,-123,1.23,-1.23")
Out: ['123', '-123', '1.23', '-1.23']

例子2

In :print(re.findall('\$\d+',"薪资:$100"))
Out: ['$100']
  • 在编程语言中,常使用原生字符串书写正则表达式避免多重转义的麻烦。

当我们使用re模块进行匹配时,我们输入一串python字符串,py先将python字符串解析为正则表达式,再利用正则表达式匹配目标字符串:

python字符串 --解析为-- > 正则表达式 --匹配-- > 目标字符串

​​\\$\\d+​​​ --解析为-- > ​​\$\d+​​​ --匹配-- > ​​$100​​

我们解释一下上面的表格的含义:如果我们用正则表达式匹配​​$100​​​,那么我们就要将正则表达式,以字符串的形式传给findall()做参数,那么我们如何写这个字符串来表达正则表达式呢?在字符串中我们遇到特殊字符(这里的特殊字符,是针对于python来说的特殊字符,比如​​​​​等等)也需要进行转义,所以我们可以用​​\\$\\d+​​​来表示正则表达式​​\$\d+​​。故,其实最正统的例子2中的写法应该是:

In : print(re.findall('\\$\\d+',"薪资:$100"))
Out: ['$100']

那为啥例子2中的写法也对了呢? 那是因为如果我们写成​​​​​,python会先经过字符串的转义解析,解析为​​​​​。而,我们例子2中的写法​​​​​,结果python无法识别。比如,对于​​​​​,由于python没有这么一个特殊字符,py无法识别,所以py就给我们原样解析了;同时,python也没有​​​​​这么一个特殊字符,所以,py也给我们原样解析了;而​​​​​本身就是​​​​​。所以最后,我们写成​​​​也能匹配$100.

比如之前一个例子:

In : print(re.findall(r'\bis\b', "This is XiaoHuang"))
Out: ['is'] #这里输出的is,是第二个is(两边都有空格的is)

若我们不在字符串前加​​​​时,python会得到什么样的结果呢?

In :print(re.findall('\bis\b', "This is XiaoHuang"))
Out: []

嗯!啥都没有~
这是为啥呢?
那是因为在python字符串中,存在特殊字符​​​​​​,表示退格。则若输入​​​​​,则python会解析为​​​​​,那么后面的字符串就不会被匹配。所以这里我们应该写成​​​​:

In : print(re.findall('\\bis\\b', "This is XiaoHuang"))
Out: ['is']

那么现在问题又来了! 如果我们现在想匹配​​​​​中的​​​​​,我们该怎么写呢???
注意:当我们利用py进行匹配时,被匹配的​​​​​也为python字符串,所以在python中应该写为:​​​​​。
这时,我们的正则表达式应该写成:​​​​,python字符串应该写成:​​​​:

In : print(re.findall('\\$\\d+\\\\\\d+',"薪资:$100\\200"))
Out: ['$100\\200']

匹配是匹配出来了,但是……WC, 这也太冗杂了。故我们引入了原生字符串。原生字符串是指,在字符串之前加一个​​​​​,使字符串内部所有可能会发生的转义,都不发生转义解析,即避免字符串内的所有转义解析。比如,在字符串前加了​​​​​之后,​​​​​就表示单纯的​​​​​,​​​​​就表示单纯的​​​​。我们在iPython内验证一下:

Python正则表达式(part2):如何正确使用转义字符?

In : r'\n'
Out: '\\n'

嗯!perfect!

因此,当我们用了原生字符串后,我们的正则表达式是什么样的,python字符串内,就可以写成什么样~
所以,我们上面的那个例子就可以写成:

In : print(re.findall(r'\$\d+\\\d+',r"薪资:$100\200"))
Out: ['$100\\200']

备注:原生字符串不仅仅在正则表达式中有应用,只要我们想保持原样的内容,不进行转义,都可以使用原生字符串。

标签:转义文章