python正则中转义字符相关问题!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| import re
b = '\\d' print(b) b = r'\\d' print(b) ''' >>> b = r'\\d' # 终端内 可见 :直接 输出b 和 print(b) 的结果不一样!!! >>> b # 因为print一次就用到了 python 3.7 的解释器,进行了一次转义。 '\\\\d' >>> b = '\\d' >>> b '\\d' '''
b = r'\\d' print(b) print(re.sub(b,'ok','00\d00'))
a = '\\d' print(a) print(re.sub(a,'ok','00\d00'))
案例解释:
(一)r'\\d' 字符串前的这个 r 表示python 在r修饰的字符串过 python解释器时 不被转义; 只会在通过 正则解释器 时 被转义一次,\\d 被 转义为 \d ,以 \d 形态进入正则层!!! 在正则层内,正则匹配过程直接把 所有的 \d 与之匹配;
(二)'\\d' 字符串,\\d 过python解释器时 已经被转义为 \d, 过正则解释器时 \d 被转义为 "数字" ,以"数字"形态进入正则层!!! 正则层内,正则匹配过程直接把 所有"数字" 与之进行匹配。
|
如何理解 python的 转义字符?
可以把字符串进入正则过程,分为为三层:
1、字符串层
(通过python解释器后,才能进入python层,过解释器的时候'\\'会被转义成'\')
2、python层
(通过正则解释器后,才能进入正则流程,过正则解释器的时候 '\\'又会被转义成 '\')
3、正则层
(终于可以开始正则匹配了!)
一道 计算过程中, \\ 正则化 变 \\\\的案例题。
本题来源于 牛客华为HJ74 参数解析
https://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677?tpId=37&tqId=21297&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D2%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
描述
在命令行输入如下命令:
xcopy /s c:\ d:\e,
各个参数如下:
参数1:命令字xcopy
参数2:字符串/s
参数3:字符串c:\
参数4: 字符串d:\e
请编写一个参数解析程序,实现将命令行各个参数解析出来。
解析规则:
1.参数分隔符为空格
2.对于用””包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” “d:"时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\program,注意输出参数时,需要将””去掉,引号不存在嵌套情况。
3.参数不定长
4.输入由用例保证,不会出现不符合要求的输入
数据范围:字符串长度:1\le s\le 1000\1≤s≤1000
进阶:时间复杂度:O(n)*O*(n) ,空间复杂度:O(n)*O*(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
import re a = input() pattern = r'".*?"' change_a = re.sub(r'".*?"','used',a) temp_list = re.findall(pattern,a)
a = change_a.split(' ') print(len(a)) for i in a: if i=='used': print(temp_list.pop(0)[1:-1]) else: print(i)
|