【问题标题】:Regular Expression. Is it possible to match (a or b) and (a or c) and (a or d) but not aaa?正则表达式。是否可以匹配(a 或 b)和(a 或 c)和(a 或 d)但不能匹配 aaa?
【发布时间】:2015-12-02 09:00:30
【问题描述】:

我试图审查一个肮脏的词。用户可以用*替换一些字符。

我们以“狗”这个词为例(这当然不脏)

  1. *og
  2. d*g
  3. 做*
  4. d**

等等

正则表达式看起来像(d|\*)(o|\*)(g|\*)

是否可以匹配以上所有变体但不匹配“***”?

【问题讨论】:

  • 虽然您在技术上不需要前瞻,但如果您不这样做,您的 RE 将变得非常大 (([d*][o*]g|[d*]o[g*]|d[o*][g*])。
  • 你怎么知道狗不脏?我的非常很快就变得浑浊了.... :-P

标签: regex python-3.x


【解决方案1】:

是的,Python 有否定的前瞻断言。你想匹配[d*][o*][g*](?!\*{3})

(?!\*{3})[d*][o*][g*]

【讨论】:

    【解决方案2】:
    ^(?!\**$)[dog*]+$
    

    您可以使用 lookahead 尝试类似的操作。参见演示。

    https://regex101.com/r/hE4jH0/23

    【讨论】:

    • 有了这个,你还必须添加(?!d*$)(?!o*$)... - 这个正则表达式需要太多的例外。
    【解决方案3】:

    你也可以使用这个正则表达式:

    ^\w{0,3}\*{0,2}\w{0,3}(?!\*)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2015-02-20
      • 2020-12-20
      • 1970-01-01
      相关资源
      最近更新 更多