python - 使用 python 2.7 正则表达式替换字符串的一部分

标签 python regex python-2.7

我有以下行:

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

其中 a 是:

xMain Buchan/y1,/y0 Angus Sub1

为什么 b 显示为 'xMain\x02\x01\x03'? 我的目的是取消名称的倒置。在 Regexbuddy 中,这可以正常工作,但在 Python 2.7 中则不行。

最佳答案

您会看到无法打印的字符,因为 \2\1\3常规 python 字符串中也有意义,作为八进制转义码:

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

它们从未按照编写的方式进入 re.sub() 函数。

使用原始字符串文字代替:

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

注意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'

关于python - 使用 python 2.7 正则表达式替换字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932759/

相关文章:

python - lxml -- 如何将 img src 更改为绝对链接

python - 如何使按钮图像拉伸(stretch)、透明、宽度高度完全缩放适合?

python - pandas 在数据框中找到两条线的交点

JavaScript 不会解析 YouTube 网址

ios - 编辑时检查文本字段文本

regex - Swift 正则表达式错误

Python 从上面的目录导入

python - Pandas 基于 key 格式化 csv 数据

python - 量化单个图像中不规则形状的最长轴和宽度

python - 如何在 Mac 上成功安装 OpenPYXL?