python 2.7 re模块斜杠匹配问题
最终目的:我是想要在字符串s2的特定位置插入s1,我采取的是re.sub法.理论上结果和插入是一样的.s1和s2都包含一些指向字符串的变量,而且这些字符串都是包含文件路径...
最终目的:
我是想要在字符串s2的特定位置插入s1,我采取的是re.sub法.理论上结果和插入是一样的.
s1和s2都包含一些指向字符串的变量,而且这些字符串都是包含文件路径分割符'\\'和换行符'\n'的.
例如:
s1='C:\\Users\\12\n'
s2='C:\\Users\\12<UL>\n'
把s1插在s2的<UL>之后.
实现目的导致的2个疑问.
疑问1:
s1明明是ps的子字符串,为什么放到re.search里面就不认了?
>>> ps
'a\n"C:\\Users"\n<UL>\n</UL>\n"C:\\Os"\n<UL>\n</UL>\n'
>>> s1='a\n"C:\\Users"\n<UL>\n'
>>> s1 in ps
True
>>> if not re.search(s1,ps):print 're think s1 is not in ps...'
re think s1 is not in ps...
这个问题导致我无法替换字符串
如下面,想把ps里面的s1字符串去除,但是无法去除:
>>> re.sub(s1,'',ps)==ps
True
疑问二,我把上面的C:\\Users换成C:\\Users\\12,结果出现错误:error: bogus escape: '\\12',完全不知是啥意思,百度一下也没有找到答案:
>>> s1='a\n"C:\\Users\\12"\n<UL>\n'
>>> ps='a\n"C:\\Users\\12"\n<UL>\n</UL>\n"C:\\Users\\q"\n<UL>\n</UL>\n'
>>> s1 in ps
True
>>> re.sub(s1,'',ps)==ps
Traceback (most recent call last):
File "<pyshell#194>", line 1, in <module>
re.sub(s1,'',ps)==ps
File "C:\Python27\lib\re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "C:\Python27\lib\re.py", line 242, in _compile
raise error, v # invalid expression
error: bogus escape: '\\12'
>>>
经过反复测试,发现:
如果文件夹名是数字开头的,则必然出现bogus escape错误..
去掉字符串中的\\,问题消失.
但是我的字符串里面肯定会有盘符\\啊.... 展开
我是想要在字符串s2的特定位置插入s1,我采取的是re.sub法.理论上结果和插入是一样的.
s1和s2都包含一些指向字符串的变量,而且这些字符串都是包含文件路径分割符'\\'和换行符'\n'的.
例如:
s1='C:\\Users\\12\n'
s2='C:\\Users\\12<UL>\n'
把s1插在s2的<UL>之后.
实现目的导致的2个疑问.
疑问1:
s1明明是ps的子字符串,为什么放到re.search里面就不认了?
>>> ps
'a\n"C:\\Users"\n<UL>\n</UL>\n"C:\\Os"\n<UL>\n</UL>\n'
>>> s1='a\n"C:\\Users"\n<UL>\n'
>>> s1 in ps
True
>>> if not re.search(s1,ps):print 're think s1 is not in ps...'
re think s1 is not in ps...
这个问题导致我无法替换字符串
如下面,想把ps里面的s1字符串去除,但是无法去除:
>>> re.sub(s1,'',ps)==ps
True
疑问二,我把上面的C:\\Users换成C:\\Users\\12,结果出现错误:error: bogus escape: '\\12',完全不知是啥意思,百度一下也没有找到答案:
>>> s1='a\n"C:\\Users\\12"\n<UL>\n'
>>> ps='a\n"C:\\Users\\12"\n<UL>\n</UL>\n"C:\\Users\\q"\n<UL>\n</UL>\n'
>>> s1 in ps
True
>>> re.sub(s1,'',ps)==ps
Traceback (most recent call last):
File "<pyshell#194>", line 1, in <module>
re.sub(s1,'',ps)==ps
File "C:\Python27\lib\re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "C:\Python27\lib\re.py", line 242, in _compile
raise error, v # invalid expression
error: bogus escape: '\\12'
>>>
经过反复测试,发现:
如果文件夹名是数字开头的,则必然出现bogus escape错误..
去掉字符串中的\\,问题消失.
但是我的字符串里面肯定会有盘符\\啊.... 展开
1个回答
展开全部
看了半天,也没明白为什么要用正则表达式re模块,不都是替换插入原始字符串吗,直接用字符串的find,replace,index等方法不就行了。
如果非要用re模块,将出问题的正则表达式用re.escape转义成本来的意思
>>> s1='a\n"C:\\Users\\12"\n<UL>\n'
>>> ps='a\n"C:\\Users\\12"\n<UL>\n</UL>\n"C:\\Users\\q"\n<UL>\n</UL>\n'
>>> s1 in ps
True
>>> ps=re.sub(re.escape(s1),'',ps)
如果非要用re模块,将出问题的正则表达式用re.escape转义成本来的意思
>>> s1='a\n"C:\\Users\\12"\n<UL>\n'
>>> ps='a\n"C:\\Users\\12"\n<UL>\n</UL>\n"C:\\Users\\q"\n<UL>\n</UL>\n'
>>> s1 in ps
True
>>> ps=re.sub(re.escape(s1),'',ps)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询