python - python中的正则表达式似乎没有像我期望的那样工作

标签 python regex

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

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)向前看断言。检查数字后面是否跟着非数字。也没有被捕获。

关于python - python中的正则表达式似乎没有像我期望的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30149776/

相关文章:

regex - R:仅当特殊正则表达式条件不匹配时才拆分

javascript - 将以@开头的任何单词加粗

python - 如何在 Python 中正确排序对象列表

python - 在 Python 中使用 WordCloud 更改单词颜色

python - 在 Python 中使用 Flask 发送 html 电子邮件

python - 用 `requests`判断域名是否被注册是否准确?

Python正则表达式查找括号内的所有内容,并预先加上前缀

c# - 如何获取括号内的括号

python - 将长字符串分解为整数

php - 在 RegEx 中接受国际名称字符