|
发表于 2022-2-14 00:07:46
|
显示全部楼层
本帖最后由 isdkz 于 2022-2-14 10:34 编辑
re.L和re.U都是改变 \w、\W、\b、\B的行为的
re.L使\w、\W、\b、\B的匹配依赖于当前语言环境
re.U使\w、\W、\b、\B可以匹配unicode编码的字符
首先\w是匹配可以用于变量命名的字符,\b是匹配单词边界,因为python3默认使用utf-8编码,本就可以用unicode字符作为变量名和单词边界,所以re.U在python3中被废弃,用不用都是一样的效果
example:(re.L我暂时还没有找到合适的应用场景,就先不举例了)
(python2)>>> import re
>>> re.match(r'\w', '你') # 不开启re.U匹配模式,无法匹配unicode字符
>>> re.match(r'\w', '你', re.U) # 开启了re.U匹配模式,成功匹配unicode字符
<_sre.SRE_Match object at 0x00000000025E4370>
>>> re.match(r'\b你好\b', '你好') # 不开启re.U匹配模式,无法将unicode字符作为单词边界
>>> re.match(r'\b你好\b', '你好', re.U) # 开启了re.U匹配模式,可以将unicode字符作为单词边界
<_sre.SRE_Match object at 0x00000000025E4578>
>>>
(python3)>>> import re
>>> re.match(r'\w', '你') # 在python3中开不开启re.U匹配模式都可以成功匹配unicode字符
<re.Match object; span=(0, 1), match='你'>
>>> re.match(r'\w', '你', re.U)
<re.Match object; span=(0, 1), match='你'>
>>> re.match(r'\b你好\b', '你好') # 在python3中开不开启re.U匹配模式都可以将unicode字符作为单词边界
<re.Match object; span=(0, 2), match='你好'>
>>> re.match(r'\b你好\b', '你好', re.U)
<re.Match object; span=(0, 2), match='你好'>
>>>
re.X 使匹配过程忽略表达式的空白和注释(空白包括空格,制表,换行这些不可见字符),因为正则表达式的空白被忽略,此时需要匹配空白可以用\s
example:>>> import re
>>> re.match(r'你 好', '你 好') # 正则表达式中间有个空格,可以成功匹配带空格的字符串
<re.Match object; span=(0, 3), match='你 好'>
>>> re.match(r'你 好', '你 好', re.X) # 开启了re.X模式,此时正则表达式中的空格被忽略,无法成功匹配字符串
>>> re.match(r'你\s好', '你 好', re.X) # 此时需要匹配字符串中的空格用\s
<re.Match object; span=(0, 3), match='你 好'>
>>> re.match(r'你好 # 这是一个注释', '你好') # 正则表达式带注释和空白,此时解释器把注释和空白当成普通字符,自然就无法匹配目标字符串
>>> re.match(r'你好 # 这是一个注释', '你好', re.X) # 开启了re.X模式,此时注释和空白被忽略,可以成功匹配目标字符串
<re.Match object; span=(0, 2), match='你好'>
>>>
关于re.L,我从网上找了一段话
re.L:使用当地locale。(python中有个locale模块,locale代表不同的语言,地区和字符集)由当前语言区域决定 \w, \W, \b, \B 和大小写敏感匹配。这个标记只能对byte样式有效。这个标记不推荐使用,因为语言区域机制很不可靠,它一次只能处理一个 "习惯”。
locale模块使用:>>> import locale
>>> locale.getlocale()
('Chinese (Simplified)_China', '936')
>>>
关于正则表达式比较详细的讲解,你可以看一下这篇文章:https://www.cnblogs.com/yyds/p/6953348.html
|
|