使用Python2.7正则表达式替换字符串的部分内容

2024-09-30 18:16:35 发布

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

我有以下一行:

b = re.sub('^xMain (\S+)/y1,/y0 (\S+ )(.*)$', 'xMain \2\1\3', a)

其中a是:

^{pr2}$

为什么b会变成{}? 我的目的是颠倒一个名字。在Regexbuddy中,这可以正常工作,但在python2.7中不行。在


Tags: 目的re名字y1y0pr2regexbuddyxmain
1条回答
网友
1楼 · 发布于 2024-09-30 18:16:35

您看到不可打印字符是因为\2\1\3常规python字符串中也有意义,如八进制转义码:

>>> '\2'
'\x02'
>>> 'xMain \2\1\3'
'xMain \x02\x01\x03'

它们从来没有像写的那样到达re.sub()函数。在

请改用原始字符串文本:

^{pr2}$

注意r'...'字符串。在原始字符串中,\...不解释转义码,保留后面的引用供re模块使用:

>>> r'xMain \2\1\3'
'xMain \\2\\1\\3'

另一种方法是将反斜杠加倍,以避免逃逸:

b = re.sub('^xMain (\S+)/y1,/y0 (\S+ )(.*)$', 'xMain \\2\\1\\3', a)

无论是哪种方式,您的替换模式现在可以按预期工作:

>>> import re
>>> a = 'xMain Buchan/y1,/y0 Angus Sub1'
>>> re.sub('^xMain (\S+)/y1,/y0 (\S+ )(.*)$', r'xMain \2\1\3', a)
'xMain Angus BuchanSub1'

相关问题 更多 >