RegEx 使用两个可能的分隔符提取字符串
RegEx to extract a string using two possible delimiters
我想使用 Kusto RegEx 从 AppInsights 日志条目中提取时间跨度。
时间跨度可以有两种可能的形式:
TotalDuration [1 day, 2:09:13.830470] Categories
TotalDuration [2:09:13.830470] Categories
我已经弄清楚如何提取整个时间跨度:
正则表达式:"TotalDuration \[(.*?)\] Categories"
但我只想提取时间跨度组件 (2:09:13.830470)。
有没有一种方法可以说我希望值受以下限制:
( 天, )(此处为时间跨度)(] 类别)
或受以下限制的值:
(TotalDuration [)(此处为时间跨度)(] 类别)
IE。第一个分隔符可以是两个不同字符串中的任何一个。
是这样的:
(天,或 TotalDuration [](此处为时间跨度)(]类别)
你可以试试这个:
TotalDuration \[(?:.+ )?(.*?)\] Categories
或者这个:
TotalDuration \[(?:.+,)?(.*?)\] Categories
示例:https://regex101.com/r/O2WJ3q/1
基本上你可以跳过 [] 中的所有字符,直到像 ,
或 whitespace
这样的字符
您可以使用 negated character class 匹配直到方括号之间的最后一个 space 并将其设为可选 (?:[^\[\]\n]+ )?
除了使用 .*?
,您还可以使用否定字符 class ([^\]\[\n]*)
以及捕获组来提高效率。
\bTotalDuration \[(?:[^\[\]\n]+ )?([^\]\[\n]*)\] Categories\b
\bTotalDuration
单词边界和匹配 TotalDuration
\[
匹配 [
(?:
非捕获组
[^[]\n]+
匹配除换行符或方括号以外的任何字符 1 次以上
)?
关闭非捕获组并使其可选
(
捕获 组 1
[^\]\[\n]*
匹配除换行符或方括号以外的任何字符 0 次以上
)
关闭组 1
\] Categories\b
匹配] Categories
和单词边界
我想使用 Kusto RegEx 从 AppInsights 日志条目中提取时间跨度。 时间跨度可以有两种可能的形式:
TotalDuration [1 day, 2:09:13.830470] Categories
TotalDuration [2:09:13.830470] Categories
我已经弄清楚如何提取整个时间跨度:
正则表达式:"TotalDuration \[(.*?)\] Categories"
但我只想提取时间跨度组件 (2:09:13.830470)。
有没有一种方法可以说我希望值受以下限制:
( 天, )(此处为时间跨度)(] 类别)
或受以下限制的值:
(TotalDuration [)(此处为时间跨度)(] 类别)
IE。第一个分隔符可以是两个不同字符串中的任何一个。
是这样的:
(天,或 TotalDuration [](此处为时间跨度)(]类别)
你可以试试这个:
TotalDuration \[(?:.+ )?(.*?)\] Categories
或者这个:
TotalDuration \[(?:.+,)?(.*?)\] Categories
示例:https://regex101.com/r/O2WJ3q/1
基本上你可以跳过 [] 中的所有字符,直到像 ,
或 whitespace
您可以使用 negated character class 匹配直到方括号之间的最后一个 space 并将其设为可选 (?:[^\[\]\n]+ )?
除了使用 .*?
,您还可以使用否定字符 class ([^\]\[\n]*)
以及捕获组来提高效率。
\bTotalDuration \[(?:[^\[\]\n]+ )?([^\]\[\n]*)\] Categories\b
\bTotalDuration
单词边界和匹配TotalDuration
\[
匹配[
(?:
非捕获组[^[]\n]+
匹配除换行符或方括号以外的任何字符 1 次以上
)?
关闭非捕获组并使其可选(
捕获 组 1[^\]\[\n]*
匹配除换行符或方括号以外的任何字符 0 次以上
)
关闭组 1\] Categories\b
匹配] Categories
和单词边界