我查了很多关于如何反转匹配的信息,但不幸的是,我无法解决我的问题。所以,假设我有这样的文本:
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
截图(之前):
截图(之后):