Python正则表达式来实现字符串的不转义

2024-06-02 06:02:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用pythonregex和backreferences实现string unescaping,但它似乎不希望工作得很好。我肯定是我做错了什么,但我不知道是什么。。。在

>>> import re
>>> mystring = r"This is \n a test \r"
>>> p = re.compile( "\\\\(\\S)" )
>>> p.sub( "\\1", mystring )
'This is n a test r'
>>> p.sub( "\\\\\\1", mystring )
'This is \\n a test \\r'
>>> p.sub( "\\\\1", mystring )
'This is \\1 a test \\1'

我想用\[char]替换\\[char],但是Python中的backreferences似乎不遵循我使用过的所有其他实现中相同的规则。有人能给我点启示吗?在


Tags: testimportrestringis规则thiscompile
3条回答

这不是安德斯的第二个例子吗?在

在2.5中,您还可以应用string-escape编码:

>>> mystring = r"This is \n a test \r"
>>> mystring.decode('string-escape')
'This is \n a test \r'
>>> print mystring.decode('string-escape')
This is 
 a test 
>>> 

好吧,我想你可能漏掉了r或者把反斜杠算错了。。。在

"\\n" == r"\n"

>>> import re
>>> mystring = r"This is \\n a test \\r"
>>> p = re.compile( r"[\\][\\](.)" )
>>> print p.sub( r"\\\1", mystring )
This is \n a test \r
>>>

如果我能理解的话,这就是我们的要求。在

我想更常见的要求是:

^{pr2}$

感兴趣的学生还应该阅读kenthompson的Reflections on Trusting Trust",其中我们的英雄用一个类似的例子来解释信任你自己没有从机器代码中引导的编译器的危险。在

我的想法是读入一个转义字符串,并取消转义(这是Python所缺少的一个特性,首先不需要借助正则表达式)。不幸的是我没有被反斜杠欺骗。。。在

另一个示例:

>>> mystring = r"This is \n ridiculous"
>>> print mystring
This is \n ridiculous
>>> p = re.compile( r"\\(\S)" )
>>> print p.sub( 'bloody', mystring )
This is bloody ridiculous
>>> print p.sub( r'\1', mystring )
This is n ridiculous
>>> print p.sub( r'\\1', mystring )
This is \1 ridiculous
>>> print p.sub( r'\\\1', mystring )
This is \n ridiculous

我想印的是

^{pr2}$

相关问题 更多 >