【问题标题】: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,你忘了逃跑。
  • 捕获您需要提取的内容。

标签: regex


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多