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错误..

去掉字符串中的\\,问题消失.
但是我的字符串里面肯定会有盘符\\啊....
展开
 我来答
albumin
推荐于2016-10-03 · TA获得超过1.2万个赞
知道大有可为答主
回答量:4889
采纳率:87%
帮助的人:2407万
展开全部
看了半天,也没明白为什么要用正则表达式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)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式