正则表达式 - 在第 n 个空格之间匹配数据并在第 n 个空格处停止

Posted

技术标签:

【中文标题】正则表达式 - 在第 n 个空格之间匹配数据并在第 n 个空格处停止【英文标题】:Regex - match data between nth space and stop at nth space 【发布时间】:2019-03-07 15:52:35 【问题描述】:

我正在尝试在日志收集工具中使用正则表达式来捕获/解析事件日志数据、windows 和 linux。我似乎找不到一个正则表达式来告诉我如何仅捕获第 n 个空格之间的数据并在下一个第 n 个空格之后停止匹配。

例如:

<11>Mar 7 09:55:54 blahblah blahblahblah textiwant blahblahblahblah

如何只捕获文本?我意识到我可以通过 (\S+ \S+ \S+ \S+ \S+) 到达 textiwant,但我很困惑如何只保留 textiwant,之前什么都没有,之后什么都没有。

谢谢!

【问题讨论】:

只捕获与您的单词匹配的\S 【参考方案1】:

利用捕获组和锚点:

^(?:\S+\s+)5(\S+)

a demo on regex101.com

【讨论】:

可以缩短为^(?:\S+ )5(\S+) 由于某种原因,这个在我的系统中不起作用,但下面的一个可以工作。我知道这应该可行,但我假设我的系统上有一些限制正在解释正则表达式? 可能是开头的锚。尝试删除^ 可能是因为在 3 月和 7 日之间实际上有 2 个空格.. 3 月 7 日 简的原始建议应该考虑到这一点,但我缩短的建议没有。

以上是关于正则表达式 - 在第 n 个空格之间匹配数据并在第 n 个空格处停止的主要内容,如果未能解决你的问题,请参考以下文章

第一个正则表达式实例匹配在第一行不匹配?

在第n次出现空格后删除所有文本

正则表达式:匹配模式后跟一个空格但不匹配2个或更多空格或EOF

在第一个空格出现时拆分字符串

REGEX - 在字符串之间查找文本 - 第一个可选,但在第一个匹配之前只有第二个

RegEx表示字符串中的N个空格