Skip to main content
 首页 » 编程设计

python之python 中的正则表达式似乎不像我期望的那样工作

2024年08月26日23傻小

我的代码似乎没有像预期的那样工作:

x = "engniu4nwi5u" 
print re.sub(r"\D(\d)\D", r"\1abc", x) 

我想要的输出是:engniuabcnwiabcu
但是实际给出的输出是:engni4abcw5abc

请您参考如下方法:

您将错误的字符分组,它必须写成

>>> x = "engniu4nwi5u" 
>>> re.sub(r"(\D)\d(\D)", r"\1abc\2", x) 
'engniuabcnwiabcu' 
  • (\D)匹配一个非数字并在 \1 中捕获它
  • \d匹配数字
  • (\D)匹配以下数字。捕获 \2

如何匹配?

engniu4nwi5u 
     | 
    \D => \1 
 
engniu4nwi5u 
      | 
     \d 
 
engniu4nwi5u 
       | 
      \D => \2 

另一种解决方案

您也可以使用环顾四周来执行与

相同的操作
>>> x = "engniu4nwi5u" 
>>> re.sub(r"(?<=\D)\d(?=\D)", r"abc", x) 
'engniuabcnwiabcu' 
  • (?<=\D)看看断言的背后。检查数字前面是否有非数字。但没有被捕获
  • \d匹配数字
  • (?=\D)向前看断言。检查数字后是否跟有非数字。也没有被捕获。