从正则表达式中的匹配结果中排除字符串



我试图从下面的字符串中捕获主题,但使用正则表达式从匹配结果中排除rn。字符串:

Sep 20 02:00:00 127.0.0.1 TestHost: Info: MID 123456 Subject "[Notification] - System 1234 [hostname] -rn SERVICE_STARTED (INFO)"

预期输出应为(不包括rn(

[Notification] - System 1234 [hostname] - SERVICE_STARTED (INFO)

我尝试在regex101 中使用以下regex

Subject ['"]?(?<subject>((?:\r\n)?.*))['"]?$

但这并没有给我带来正确的结果。

请注意,我没有;我没有使用replace/sub的选项,因为我必须这样做。

Splunk当然有替换字符串中值的方法——要么在sed模式中使用rex,要么使用eval replace()

这个正则表达式将提取您要查找的内容:

| rex field=_raw ""(?<subject>[^"]+)"

随后更换rn:

| eval subject=replace(subject,"[rn]+","")

如果replace对您不起作用(有时这些隐藏字符会显示为连续的空白(,请执行以下操作:

| eval subject=replace(subject,"ss+"," ")

试试这个

const str = 'Sep 20 02:00:00 127.0.0.1 TestHost: Info: MID 123456 Subject "[Notification] - System 1234 [hostname] -rn SERVICE_STARTED (INFO)"';
console.log(str.match(/[^('")]*.*[('")$]/g)[1].replace(/[rn'"]/g, ''));

RegEx解释

[^('")]:匹配以单引号或双引号开头的字符串。

*.*:匹配启动后的任意字符数

[('")$]:用于匹配末尾的单引号或双引号。

如上所述,regex将匹配给定字符串中的两个子字符串,我们将获取第二个子字符串,然后使用String.replace()方法替换rn

相关内容

  • 没有找到相关文章

最新更新