背景
我想开发一个从非结构化日志数据中提取字段的程序。我正在使用grok
来标识与输入字符串匹配的正则表达式。虽然我已经完成了标识正则表达式的部分,但我想将标识的正则表达式合并为一个,以便匹配整个字符串
示例-
对于上面的logline,我标识了以下正则表达式-
CISCOTIMESTAMP - \b(?:Jan(?:uary|uar)?|Feb(?:ruary|ruar)?|M(?:a|ä)?r(?:ch|z)?|Apr(?:il)?|Ma(?:y|i)?|Jun(?:e|i)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|O(?:c|k)?t(?:ober)?|Nov(?:ember)?|De(?:c|z)(?:ember)?)\b +(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])(?: (?>\d\d){1,2})? (?!<[0-9])(?:2[0123]|[01]?[0-9]):(?:[0-5][0-9])(?::(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?))(?![0-9])
CISCOTAG - [A-Z0-9]+-(?:[+-]?(?:[0-9]+))-(?:[A-Z0-9_]+)
CISCOACTION - Built|Teardown|Deny|Denied|denied|requested|permitted|denied by ACL|discarded|est-allowed|Dropping|created|deleted
IPV4 - (?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])
URIPATH - (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+(?:\?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]<>]*)?
问题
Built|Teardown|Deny|Denied|denied|requested|permitted|denied by ACL|discarded|est-allowed|Dropping|created|deleted
(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])
(Built|Teardown|Deny|Denied|denied|requested|permitted|denied by ACL|discarded|est-allowed|Dropping|created|deleted) ((?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9]))
我想组合捕获的正则表达式,同时考虑中间的任意‘填充’。
有办法做到这一点吗?
URIPATH在regex101上似乎关闭。您还没有转义“/”
一旦转义完成,就可以执行此操作。
URIPATH: ((?:\/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+(?:\?[A-Za-z0-9$.+!*'|(){},~@#%&\/=:;_?\-\[\]<>]*)?)
剩下的工作就是用.*作为填充正则表达式。
CISCOTIMESTAMP+[FILLER REGEX]+CISCOTAG+[FILLER REGEX]+CISCOACTION+[FILLER REGEX]+IPv4+URIPATH
(\b(?:Jan(?:uary|uar)?|Feb(?:ruary|ruar)?|M(?:a|ä)?r(?:ch|z)?|Apr(?:il)?|Ma(?:y|i)?|Jun(?:e|i)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|O(?:c|k)?t(?:ober)?|Nov(?:ember)?|De(?:c|z)(?:ember)?)\b +(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])(?: (?>\d\d){1,2})? (?!<[0-9])(?:2[0123]|[01]?[0-9]):(?:[0-5][0-9])(?::(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?))(?![0-9])).*([A-Z0-9]+-(?:[+-]?(?:[0-9]+))-(?:[A-Z0-9_]+)).*(Built|Teardown|Deny|Denied|denied|requested|permitted|denied by ACL|discarded|est-allowed|Dropping|created|deleted).*((?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9]))((?:\/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+(?:\?[A-Za-z0-9$.+!*'|(){},~@#%&\/=:;_?\-\[\]<>]*)?)
我有3个正则表达式,但当模式匹配时执行相同的操作,所以我考虑将所有三个表达式合并为一个。我尝试了很多,但无法让“|”I.e”或“在我的正则表达式中工作 regex1:<代码>文本。替换(/([\u00A9-\u3299])/g,函数myFunction(x){…} regex2: regex3: 我试过这样做,但它不起作用regex:
问题内容: 我有一个有效的正则表达式: 我也有一个正则表达式: 但是我不知道如何将两者结合起来 我试过了,但实际上没有用… 如果重要的话,这就是Java正则表达式中的全部内容。 问题答案: 如果您想要匹配以或开头的序列的正则表达式,请尝试以下操作: 但是除了周围的两个空格字符外,您的正则表达式也应该与之匹配: 这两个正则表达式匹配同一组字符串。
问题内容: 我有两个Python字典,我想编写一个返回这两个字典合并的单个表达式。该方法将是我需要的,如果它返回了结果而不是就地修改。 我怎样才能在最终的合并字典,不是? (更清楚地说,我正在寻找的最后一个胜出的冲突处理方法也是如此。) 问题答案: 对于字典和,变成了浅层合并的字典,带有替换的值。 在Python 3.5或更高版本中: 在Python 2(或3.4或更低版本)中,编写一个函数: 现
问题内容: 被分组的一头雾水。它有什么不同? 问题答案: 这里有两件事需要解释:量化组的行为和方法的设计。 在您的第一个示例中,匹配在组#1中捕获的。然后,它匹配并捕获到#1组中,从而覆盖。然后再次使用,这就是比赛结束时第一组的比赛。 但是它 确实 匹配整个字符串。如果您正在使用或者,你就可以看MatchObject,看到包含与包含。但是返回字符串,而不是MatchObjects。如果没有组,则返
我正在尝试编写一个正则表达式,使其只有两个单词,它们之间只有一个空格。两个字都不能少于三个字符。例子:乔·史密斯
我有以下字符串: 如果您将它格式化得很好,您将会看到类似这样的内容: 所以我有一堆锚标签,它们之间有断点。在每个锚的文本中,我想删除管道字符和文件类型: 狗-00.jpg|图像/JPEG 变成 dog-00.jpg 正则表达式也应该适用于所有未来的文件类型,例如: dog-01.docx|应用/vnd.openxmlformats-officedocument.wordprocessingml.d