代码之家  ›  专栏  ›  技术社区  ›  Stephen

regex:\w,下划线除外(添加到类,然后从类中排除)

  •  1
  • Stephen  · 技术社区  · 6 年前

    这个问题适用于python 3正则表达式。我认为它也可能适用于其他语言。

    这个问题很容易被误解,所以我在描述它时要小心。

    作为背景, \w 意思是“一个单词字符”。在某些情况下,python 3会将其视为 [a-zA-Z0-9_] 但是如果正则表达式是一个字符串,它将支持Unicode,因此 \w 意思是“任何Unicode单词字符”。这通常是一件好事,因为人们使用不同的语言,而且很难构建一个类似 [AZ-ZO-99] 同时适用于所有语言。我想 \w 因此在多语言设置中最有用。

    但有一个问题:如果您不想匹配下划线,因为您认为它们实际上不是单词字符(对于您的特定应用程序而言),该怎么办?

    如果您只关注英语应用程序,最好的解决方案可能是跳过 \w 完全且仅使用 [a-zA-Z0-9] . 但是,如果您关注的是全局应用程序,并且不需要下划线,那么您可能遇到了非常不幸的情况。我还没写,但我想一次写一个代表100种语言的范围是非常困难的,这样你就可以避免下划线了。

    所以我的问题是:有什么方法可以使用吗 \w 要匹配任何Unicode字字符,但不知何故也要从类中排除下划线(或其他一些不需要的字符)?我不认为我见过这样的描述,但它会非常有用。类似的东西 [\w^_] .当然,这实际上不起作用,但我的意思是“使用一个字符类,它从表示的所有内容开始 \w ,然后继续从该类中删除下划线。”

    思想?

    1 回复  |  直到 6 年前
        1
  •  3
  •   iBug    6 年前

    1. [^\W_]

    2. regex [[\w]--[_]]

      r = regex.compile(r"(?V1)[\w--_]")
      

      r = regex.compile(r"[\w--_]", flags=regex.V1)
      

      regex re