我怎样才能反转我的正则表达式匹配结果?

我怎样才能反转我的正则表达式匹配结果?

我查了很多关于如何反转匹配的信息,但不幸的是,我无法解决我的问题。所以,假设我有这样的文本:

GS Sos_519 082_KO_Ge124222sshelden892 345

我的目标是匹配除 XYZ XYZ(仅数字)之外的所有内容。因此,我希望我的结果是: 519 082892 345。现在,我已设法使用此正则表达式执行相反的操作:\d\d\d\s\d\d\d。它完全匹配519 082892 345,现在我必须将其反转。我转到逻辑以匹配我想要的结果,然后将其反转..以为这样会更容易..但我可能错了。匹配不属于该特定格式的所有内容看起来真的很复杂。我尝试使用正则表达式将其反转,如下所示:

^(?:[\d\d\d\s\d\d\d].)*$

但不幸的是它没有匹配任何内容。我是正则表达式的新手,非常希望得到一些帮助。提前谢谢您!

答案1

这里的策略是尝试匹配3 digits spaces 3 digits(即\d{3}\h+\d{3})并且不关心它们(即不删除),或者匹配任何字符并将其删除。

环视(?<!\d)(?!\d)确保我们不匹配 4 位数字。

  • Ctrl+H
  • 找什么:(?<!\d)\d{3}\h+\d{3}(?!\d)(*SKIP)(*FAIL)|.
  • 用。。。来代替:LEAVE EMPTY
  • 查看 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline
  • Replace all

解释:

(?<!\d)     # negative lookbehind, make sure we haven't digit before
\d{3}       # 3 digits
\h+         # 1 or more horizontal spaces
\d{3}       # 3 digits
(?!\d)      # negative lookahead, make sure we haven't digit after
(*SKIP)     # skip this match
(*FAIL)     # force the match to fail
  |         # OR
.           # any character but newline

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

相关内容