【问题标题】:Match all except certain phrase匹配除特定短语之外的所有内容
【发布时间】:2021-03-22 22:52:35
【问题描述】:

我发现了很多关于“匹配字符串中除单个单词之外的所有单词”的问题。但是,它们都不适用于短语(两个或多个单词组合)。假设我有一个字符串,如示例 (RegEx)。我想匹配单个单词 + 10 位数字的所有可能组合,除了某些组合/短语“nip + 10 位数字”(+ 表示简单的空格)。在我的示例中,我使用 \bnip\s*\d{10}\b 匹配“nip + 10 位数字”,但我想匹配所有 extept “nip + 10 位数字”。 hello 也不应该匹配,因为右侧缺少 10 位数字。如有任何帮助,我们将不胜感激。
示例:

   hello 
   alpha 1111111111 # should be matched
   allla 2322322321 # should be matched
   nip 5260305006 
   pin 5260305006 # should be matched
   nipp 5260305006 # should be matched

【问题讨论】:

  • 喜欢这个? \b(?!nip\b)\S+\s*\d{10}\bregex101.com/r/dJwTrJ/1
  • 谢谢,这是我一直在寻找的解决方案。我使用了\b(?!nip)\s*\d{10}\b,但它没有用。你能解释一下你\S+ 添加的目的是什么吗?
  • 在匹配可选的空白字符之前匹配 1 个或多个非空白字符。我已将其添加为带有解释的答案。

标签: regex regular-language


【解决方案1】:

你可能会使用

 \b(?!nip\b)\S+\s*\d{10}\b

说明

  • \b(?!nip\b)一个词的边界,断言右边不是nip和一个词的边界
  • \S+\s* 匹配 1+ 个非空白字符,后跟可选的空白字符 (或使用 \w+ 而不是 \S+ 仅匹配单词字符)
  • \d{10}\b 匹配 10 位数字,后跟单词边界

Regex demo

如果您想want to match all possible combination of a single word + 10-digits 并且不想匹配nip + 10-digits number" (+ means a simple space),您可以将其从匹配中排除,包括空格和 10 位数字。

请注意,这与 nip5260305006 匹配,因为两者之间没有空格。

\b(?!nip \d{10}\b)\S+\s*\d{10}\b

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2011-01-25
    • 1970-01-01
    • 2010-12-13
    相关资源
    最近更新 更多