Regex保留w,单词之间使用连字符并删除数字



我很难扩展下面的表达式来匹配和删除数字:

[^w -]|_|-(?!w)|(?<!w)-

的例子:

123 !"§$%&/()= äüöüÄÖÜÄßßßß hello-123, hello-hello, hello-.

Exprected输出:

äüöüÄÖÜÄßßßß hello hello-hello hello

可以使用

-?d+-?|[^w -]|_|-(?!w)|(?<!w)-
-*d+(?:.d+)?-*|[^w -]|_|-(?!w)|(?<!w)-

参见regex演示。

-?d+-?|部分匹配

  • -?-可选-
  • d+-一个或多个数字
  • -?-可选-
  • |-或(其他替代方案)。

-*d+(?:.d+)?-*部分也匹配浮点值,并且匹配数字两端的0个或多个连字符。

-替换为W以匹配任何非字字符。

参见Python演示:

import re
text = '123 !"§$%&/()= äüöüÄÖÜÄßßßß hello-123, hello-hello, hello-.'
print( re.sub(r'-?d+-?|[^w -]|_|-(?!w)|(?<!w)-', '', text).strip() )
# => äüöüÄÖÜÄßßßß hello hello-hello hello