str = 'set width=20 and height=10' c = re.sub('(\w+)=(\d+)','\2=\1',str) print(c)的结果为set = and =为什么最后替换的是空值
时间: 2024-09-24 11:12:08 浏览: 28
JavaScript中“+=”的应用
`re.sub()` 函数是用来在字符串中查找并替换正则表达式匹配的内容。在这个例子中,正则表达式 `(\w+)=(\d+)` 匹配任何单词字符 (`\w+`) 后跟着等号等于数字 (`=\d+`) 的模式。
然而,在函数 `re.sub()` 中,提供的替换字符串 `\2=\1` 实际上是在尝试交换两边捕获组的内容。`\2` 是第二组匹配(第二个等号右边的数字),`\1` 是第一组匹配(第一个等号左边的单词)。但是,由于 Python 字符串中没有自增或反向引用的功能,所以直接写 `\2=\1` 并不会像预期那样工作,它会被解释为两个单独的字符串,而不是将它们组合在一起。
所以当 `re.sub()` 运行时,实际替换的是原始的 `width=` 和 `height=`,因为它们不是按照原样交换的。结果字符串变成了 `set = and =`,其中 `` 可能是你输入字符串时的默认转义字符,而 `` 是空格或其他未明确说明的内容。
如果你想真正实现宽高值的交换,应该在替换字符串中使用字符串连接或格式化功能:
```python
import re
str = 'set width=20 and height=10'
new_str = re.sub(r'(\w+)=(\d+)', r'\2, \1', str)
# 或者使用字典存储键值对再合并
pairs = {'width': 20, 'height': 10}
c = ', '.join([f'{value}={key}' for key, value in pairs.items()])
print(c) # 输出:10, width and 20, height
```
阅读全文