[英]How to match a field in the middle or the end of a line with separators?
抱歉,这个标题,我不知道如何用一句话来解释我的问题。
我正在尝试匹配日志中的字段,但是我不知道它是在行的中间还是在行的结尾。
三行示例:
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+=|$)
你会怎么做?
好吧,我看到了开头的潜在瓶颈: C=
也将匹配AC=
,因此我将在此处使用单词边界\\b
。
我不认为您确实打算匹配下一个选项的一部分,因此我将使用先行而不是非捕获组( (?: \\w+=)
)。
\bC=(.+?)(?=$|\s+[A-Z]=)
观看演示
在这里, .+?
将匹配1个或多个字符,直到字符串的末尾或1个或多个空格以及一个大写AZ
字母,后跟=
。
如果可以有任何Unicode字母,则可以用\\p{Lu}
替换[AZ]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.