获取一些数据但不是全部使用正则表达式

Get some data but not all using regex

我有一些这样的数据:

disconnected, received disassoc: sending station leaving (8)
disconnected, 4-way handshake timeout
disconnected, too weak signal, signal strength -91
disconnected, registered to other interface

我想得到没有数字和括号的原因。
所以不要包含任何 (x)-xx,其中 x 是数字(最后)

输出应该是

received disassoc: sending station leaving
4-way handshake timeout
too weak signal, signal strength
registered to other interface

我想我需要看一下但不确定。

这不起作用:

disconnected, (?<reason>.*)( -\d+)?

原因还是会包括-91

这只给出带有 -xx 或 (x) 的行,缺少其余行

disconnected, (?<reason>.+(?=-\d+|\(\d\)))

这会给出所有行,但还会在原因中包含 -xx 和 (x)

disconnected, (?<reason>.+(?=-\d+|\(\d\))?)

PS -xx(x) 总是在最后所以可以使用锚点 $

您可以使用带有可选非捕获组的交替来匹配字符串末尾的两个选项。

该值在命名的捕获组中 reason

disconnected, (?<reason>.*?)(?:\(\d+\)| -\d+)?$

部分

  • disconnected, 匹配断开,space
  • (?<reason>.*?) 命名捕获组 reason,尽可能少地匹配任何字符
  • (?:非捕获组
    • \(\d+\)匹配括号中的1+位数字
    • |
    • -\d+匹配一个space-和1+个数字
  • )?关闭群组并设为可选
  • $ 字符串结束

Regex demo