正则表达式捕获字符后的文本并以空格​​结尾[重复]

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.232323Q232 K1232Q232.1232K1232.2323 Q232.1232 吗? 我猜是这样的 Q(\d+.?\d+) 并使用 $1 仅跟踪已捕获的数字 @Baldráni,你忘了逃跑。 捕获您需要提取的内容。 【参考方案1】:

你可以使用

/(?<=Q)(?:\d+(?![.\d])|\d+\.\d+(?![.\d]))/gm

demo

(?&lt;=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 的命令行上使用正则表达式?

用于根据空格分隔符拆分文本的正则表达式 [重复]

10 位或 6 位数字的正则表达式不应以“/”开头和结尾,也可以是字符串中的单个单词 [重复]

正则表达式:指定“空格或字符串开头”和“空格或字符串结尾”

15.python正则匹配 元字符转义重复或捕获分组断言:零度断言负向零宽断言贪婪非贪婪引擎选项