正则表达式匹配除此正则表达式之外的所有内容

时间:2018-05-23 07:17:10

标签: regex

我认为这对很多人来说都是一件简单的事情,但目前我对正则表达式的知识非常有限。我希望匹配除字符串中的两位数字之外的所有内容。

例如:

TEST 22的 KLO4567

QE 45的 C2C

LOP 10的 G7G400

现在我发现正则表达式匹配两位数字: \ d {2}

符合以下条件:

TEST的 22 KLO4567

QE的 45 C2C

LOP的 10 G7G400

现在在我看来,将这个正则表达式转换为匹配所有内容相当容易但是" \ d {2}"。我搜索了很多,但我似乎无法完成它。我希望这里有人可以提供帮助。

3 个答案:

答案 0 :(得分:2)

这仅适用于正则表达式引擎支持后面的内容:

^.+?(?=\d{2})|(?<=\d{2}).+$

说明:

|将两种情况分开:

  • ^。+?(?= \ d {2})

这匹配从字符串开头(^)到遇到\d{2}的所有内容。

  • (小于?= \ d {2})。+ $

这匹配字符串的结尾,从两位数之后的位置开始。

如果您的正则表达式引擎不支持外观(例如JavaScript),我认为不可能使用纯正则表达式解决方案。

您可以匹配第一部分:

^.+?(?=\d{2})

然后获取匹配结束的位置,将该数字加2,并从该索引中获取子字符串。

答案 1 :(得分:1)

你正确拒绝正则表达式中的搜索通常是相当棘手的。

在你的情况下,我认为你想拥有[^\d{2}],但是,这很棘手,因为你的其他字符串也包含两位数,所以使用它的正则表达式不会选择它们。

我会使用这个正则表达式(使用PCRE 8.36,但也应该在其他人中使用):

\*{2}\w*\*{2}

说明:

\*{2} ....完全匹配“*”两次 \w* ....匹配“字符”零或无限次

答案 2 :(得分:0)

发现一个正则表达式很简单:

^(.*?[^\d])\d{2}([^\d].*?)$

解释:

  • ^:匹配行的开头
  • (。*?[^ \ d]):匹配并捕获两个数字前的第一部分。它可以包含任何东西(。*?),但需要以不同的数字([^ \ d])结束,所以我们确保中间只有2个数字
  • \ d {2}:是您自己找到的部分
  • ([^ \ d]。*?):是(。*?[^ \ d])的对称:从一个不同于数字([^ \ d])的东西开始,然后匹配下一个。
  • $:直到最后一行。

要测试此值,您可以使用此link

它将匹配第一次出现的双位数,但因为OP表示只有一位正确完成了这项工作。我希望它可以与每个正则表达式引擎一起使用,因为没有太复杂的使用。