繁体   English   中英

如何用分隔符匹配行中间或行尾的字段?

[英]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=.*?($|\n|(\w=))

您可以在这里尝试: https : //regex101.com/r/oN8cS2/1

好吧,我看到了开头的潜在瓶颈: C=也将匹配AC= ,因此我将在此处使用单词边界\\b

我不认为您确实打算匹配下一个选项的一部分,因此我将使用先行而不是非捕获组( (?: \\w+=) )。

\bC=(.+?)(?=$|\s+[A-Z]=)

观看演示

在这里, .+? 将匹配1个或多个字符,直到字符串的末尾或1个或多个空格以及一个大写AZ字母,后跟=

如果可以有任何Unicode字母,则可以用\\p{Lu}替换[AZ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM