对不起这个标题,我不知道如何用一句话来解释我的问题。
我试图匹配日志中的字段,但我不知道它是在行中间还是在行尾。
三行示例:
B=this is a short sentence C=see you soon A=hello world
C=see you soon B=this is a short sentence A=hello world
A=hello world B=this is a short sentence C=see you soon
我想获得" C"的价值。现场(见到你)。 我的问题是最后一行,因为字符串末尾没有分隔符。
这就是我的尝试。
这个与最后一行不匹配,因为它是最后一个字段:
C=([^=]+) \w+=
这个有效,但看起来过于复杂:
C=([^=]+)(?: \w+=|$)
你会怎么做?
答案 0 :(得分:0)
答案 1 :(得分:0)
好吧,我发现开头有一个潜在的瓶颈:C=
也会匹配AC=
,因此我会在那里使用单词边界\b
。
我认为你不打算匹配下一个选项的一部分,所以我使用预测而不是非捕获组((?: \w+=)
)。
\bC=(.+?)(?=$|\s+[A-Z]=)
请参阅demo
此处,.+?
将匹配1个或多个字符,直到字符串末尾或1个或多个空格以及大写A-Z
字母后跟=
。
如果可以有任何Unicode字母,您可以将[A-Z]
替换为\p{Lu}
。