regex 检测包含有效数字范围的句子

nzk0hqpo  于 2022-12-27  发布在  其他
关注(0)|答案(3)|浏览(323)

我正在尝试编写一个正则表达式来检测包含数字范围的句子,例如:“我每天吃2-6个披萨”“我的体重在50.22-220.5公斤之间。”
但不是带更多连字符的数字:“我的电话号码是1-23-4567”或:“我用WD-40穿裤子。”
到目前为止,我已经提出了:

\b\d+-\d+\b

但它仍然可以检测到123-2312-12之类的东西。

tkclm6bt

tkclm6bt1#

如果支持lookarounds,您可以将模式编写为:

(?<!\S)\d+(?:\.\d+)?-\d+(?:\.\d+)?(?!\S)
    • 说明**
  • (?<!\S)左侧的空白边界
  • \d+(?:\.\d+)?匹配1+位数和可选小数部分
  • -按字面匹配
  • \d+(?:\.\d+)?将1+位数与可选小数部分匹配
  • (?!\S)右侧的空白边界

参见regex demo

m4pnthwp

m4pnthwp2#

恐怕你的问题太宽泛了,静态正则表达式不一定能处理,但我会尝试给予你一个如何使用正则表达式实现范围的基本方法。例如,下面的模式:

[2-6][1-8]

匹配2168之间的任意数字。
你可以使用类似这样的东西,试着实现你想要的东西,但是就像我说的,用一个静态正则表达式来处理所有的范围是很困难的,你可以试着用here

wgx48brx

wgx48brx3#

此解决方案排除了所有不允许的序列:
(?!(()|()))排除具有OR |条件的模式
(\d+-\d+-)排除包含1-23-形式的数字的句子
([A-Z]-\d+)不包括后面跟有连字符和数字的所有大写字母,如
D-4

^((?!(\d+-+\d+-)|[A-Z]-\d+).)+$

相关问题