为什么此正则表达式未删除“ \”和“-”?

时间:2019-07-08 18:01:31

标签: python regex

我正在尝试使用正则表达式匹配要删除的字符来从文本中删除反斜杠和连字符。

SPL_CHAR2 = r"[,(.;)@\#?\|!-+_*=~<>/&$]+"

def remove_special_chars(text: str) -> str:
    text = re.sub(SPL_CHAR2, ' ', text)
    return text

问题在于这些字符没有被删除。

1 个答案:

答案 0 :(得分:0)

这些字符在正则表达式定义中具有特殊含义。为此,请重新排列字符集,如下所示:

def impl(c: blackbox.Context)(x: c.Expr[String]): c.Expr[String] = {
  import c.universe._
  println(s"input: ${showRaw(x.tree)}")
  try {
    val x1 = c.Expr[String](c.untypecheck(x.tree.duplicate))
    val x2 = c.eval(x1)
    println(s"compile-time value is: $x2")
    c.Expr[String](q"$x2")
  } catch {
    case ex: Throwable =>
      println(ex.getMessage)
      x
  }
}

我已将破折号移到开头(这样就不再定义字符范围),并且反斜线已加倍。

您可以将破折​​号保留在原处,而不必在其前面移动破折号。

语法在这里定义:https://docs.python.org/2/library/re.html#regular-expression-syntax(搜索SPL_CHAR2 = r"[-,(.;)@\#?\\|!+_*=~<>/&$]+" )。