【问题标题】:how to match the following pattern in regex?如何在正则表达式中匹配以下模式?
【发布时间】:2020-07-24 06:39:03
【问题描述】:

如何在给定段落中匹配any number followed by h or t or l 之类的模式1h , 126h or 1268h 但不匹配1.1h 12.6h or 12.68h

我正在编写一个可以将1h 替换为1001268h126800 的应用程序,这样一个人就可以简单地将h 替换为一个数字而不是输入h,但由于一些错误它也匹配十进制数字。

我写的模式是(\d+)(h|t|l)

【问题讨论】:

  • 您的意思是要匹配整个字符串吗? ^(\d+)(h|t|l)$。或者,如果您可以在字符串中的任何位置使用数字,(?<!\d)(?<!\d\.)(\d+)([htl])\b。根据正则表达式的风格,(?<!\d)(?<!\d\.) 可以写成(?<!\d|\d\.) 甚至(?<!\d\.{0,1})
  • 我想在字符串中的任何地方匹配
  • 什么是正则表达式? regexp-replace 标签表示您正在使用 Oracle。是这样吗?
  • 我正在使用 autohotkey 不确定引擎
  • 它使用 PCRE。移除标签。你可以使用(?<!\d|\d\.)(\d+)([htl])\b

标签: regex autohotkey


【解决方案1】:

如果支持正向后视或锚点以匹配整行,您可以在左侧使用空白边界 (?<!\S)

交替可以写成字符类[htl]

(?<!\S)(\d+)([htl])
  • (?&lt;!\S) 正面向后看,断言左边的不是非空白字符
  • (\d+)捕获组1,匹配1+位数
  • ([htl]) 捕获组 2,匹配 h torl`

Regex demo

使用锚点匹配整行

^(\d+)([htl])$

Regex demo

如果不进行环顾,您可以匹配空格字符或字符串 (?:\s|^) 的开头,例如:

(?:\s|^)(\d+)([htl])

Regex demo

【讨论】:

  • ...如果不需要单独捕获匹配的两个组件,则只需 (?&lt;!\S)\d+[htl]
  • @CarySwoveland 正确,我将给定的模式与组一起使用,因为我不知道 OP 是否需要自动热键的组。
猜你喜欢
  • 2021-09-21
  • 2022-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多