正则表达式 - 在第 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 个空格处停止的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式:匹配模式后跟一个空格但不匹配2个或更多空格或EOF