正则表达式捕获字符后的文本并以空格结尾[重复]
Posted
技术标签:
【中文标题】正则表达式捕获字符后的文本并以空格结尾[重复]【英文标题】:Regex expression to capture text after a character and terminated by whitespace [duplicate] 【发布时间】:2020-06-15 07:19:19 【问题描述】:寻求有关 RegEx 表达式的帮助。我想解析类似于下面的一行,捕获字母 Q 之后的整数:
Q232.1232 K1232.232323
理想情况下输出为 232.1232。
表达式 /(^Q)[0-9.-]* 。为我提供了 Q232.1232 但我不希望输出中出现 Q。
感谢任何可以提供帮助的人!
【问题讨论】:
了解capturing groups
。
232.1232
不是整数。 :-) 你能有Q232 K1232.232323
或Q232 K1232
或Q232.1232
或K1232.2323 Q232.1232
吗?
我猜是这样的 Q(\d+.?\d+)
并使用 $1 仅跟踪已捕获的数字
@Baldráni,你忘了逃跑。
捕获您需要提取的内容。
【参考方案1】:
你可以使用
/(?<=Q)(?:\d+(?![.\d])|\d+\.\d+(?![.\d]))/gm
demo
(?<=Q)
是一个积极的回溯。它要求匹配前面紧跟"Q"
,但"Q"
不是匹配的一部分。
我已经对可以匹配哪些字符串做出了假设。这些都反映在演示中。
正则表达式可以写成free-spacing模式以使其自文档化:
/
(?<=Q) # match 'Q' in a positive lookbehind
(?: # begin non-capture group
\d+ # match representation of an integer (1+ digits)
(?![.\d]) # do not match a period or digit (negative lookahead)
| # or
\d+\.\d+ # match representation of a float
(?![.\d]) # do not match a period or digit (negative lookahead)
) # end non-capture group
/gmx # global, multiline and free-spacing regex definition modes
【讨论】:
我更喜欢你评论中的版本。【参考方案2】:将捕获括在括号中的任何字符组。然后,您可以使用反向引用在替换表达式中引用这些捕获的组。
所以对于你的例子,你需要
(^Q[0-9.-])*
通常使用 $ 或 \ 访问反向引用,后跟捕获的组号,在您的情况下为 $1
【讨论】:
以上是关于正则表达式捕获字符后的文本并以空格结尾[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何过滤文本文件中以大写字母开头并以正整数结尾的行,并在 linux 的命令行上使用正则表达式?