正则表达式替换所有除非行尾($ in in [] issue)

时间:2013-12-31 15:55:30

标签: python regex

假设我有一个字符串:

s = "4n5n6n"

我想创建一个正则表达式,删除除数字之外的所有内容以及字符串末尾的n。所以最终的解决方案应该是这样的:

s = "456n"

如果我像这样使用正则表达式:

re.sub(r'[^n$\d]', "", s)

$似乎在括号内失去意义。解决方案是什么?

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

re.sub(r'[^n\d]|n(?!$)', "", s)

regex101 demo

这将匹配除n以外的任何非数字和任何字符,或者不在最后的任何n(“不在最后”表示否定前瞻{{ 1}}内有(?! ... )

答案 1 :(得分:1)

另一种方式,也许比@Jerry解决方案更简单易读(这仍然是完美的)是替换任何n字符后跟一个被捕获的数字的数字:

>>> re.sub(r'n(\d+)', "\g<1>", s)
'456n'