regex 排除一行中的字符但不排除另一行中的字符的正则表达式

xoshrz7s  于 2023-01-31  发布在  其他
关注(0)|答案(2)|浏览(118)

我有下面两行代码,我想为它们创建一个表达式:
身份验证NAS-IP-地址=0.0.0.0,
身份验证警报=无法构造筛选器=选择COALESCE(' %{端点:英特尔端点块位置}','无')类似于'%;“||“%{设备:位置}”||“;%”的原样被阻止(_B)。
我正在尝试创建一个捕获组,该捕获组捕获每行中第一个'='之后的所有内容(“Address=”和“Alerts=”之后的所有内容)。但是,我希望排除第一行末尾的','。
这是我最接近的一次

^([\S]+)=(.+)(,$)?

我在这里的目标是捕获所有内容,除了出现在行尾之前的逗号。
以下表达式将排除第一行中的',',但也会在第二行中的逗号处停止捕获组,因此不会捕获整个值。

^([\S]+)=(.+),

这是正则表达式可以做到的吗?我可以创建一个表达式来排除一行中的字符而不排除另一行中的字符吗?

vyswwuz2

vyswwuz21#

您可以尝试将第二组设为非贪婪:

^(\S+)=(.+?),?$

Regex demo.

2exbekwf

2exbekwf2#

据我所知,在第一行中,您希望捕获第一个等号之后的所有内容,但该行末尾的逗号除外;在所有其他行中,您希望捕获第一个等号之后的所有内容,而不管该行是否以逗号结尾。您可以使用以下正则表达式来实现这一点。

(?:\A(\S+)=(.+),$|^(?!\A)(\S+)=(.+))

Demo
正则表达式可以分解如下。

(?:      # begin non-capture group
  \A     # match beginning of the string
  (\S+)  # match >= 1 non-whitespace chars, save to group 1
  =      # match equals sign
  (.+)   # match >= 1 chars other than line terminators, save to group 2
  ,      # match a comma
  $      # match end of line
|        # or
  ^      # match beginning of a line
  (?!\A) # assert location is not at the beginning of the string
  (\S+)  # match >= 1 non-whitespace chars, save to group 3
  =      # match equals sign
  (.+)   # match >= 1 chars other than line terminators, save to group 4 
)        # end non-capture group

(?!\A)是一个 * 负前视 *。也可以使用 * 负后视 * (?<!\A)

相关问题