正则表达式查找字符串中的整数和小数

2024-05-18

我有一个像这样的字符串:

$str1 = "12 ounces";
$str2 = "1.5 ounces chopped;

我想从字符串中获取金额,无论它是否是小数(12 或 1.5),然后获取紧邻的前一个测量值(盎司)。

我能够使用一个非常基本的正则表达式来获取测量值,但是获取小数/整数给我带来了问题。

感谢您的帮助!


如果您只想获取数据,则可以使用松散的正则表达式:

([\d.]+)\s+(\S+)
  • ([\d.]+): [\d.]+将匹配严格的数字序列并且.(它的意思是4.5.6 or ....会匹配,但这些情况并不常见,这只是为了抓取数据),括号表示我们将捕获匹配的文本。这.这是字符类内部[],所以不需要转义。

  • 后跟任意空格\s+和非空格字符的最大序列(由于贪婪量词)\S+(非空格确实是非空格:它将匹配 Unicode 中的几乎所有内容,除了空格、制表符、换行符、回车符)。

您可以获取第一个捕获组中的数字,以及第二个捕获组中的单位。

你可以对数字严格一点:

(\d+(?:\.\d*)?|\.\d+)\s+(\S+)
  • 唯一的改变是(\d+(?:\.\d*)?|\.\d+),所以我只解释这部分。这有点严格,但是否更严格更好取决于输入域和您的要求。它将匹配整数34, 带小数部分的数字3.40000并允许.5 and 34.案件通过。超过的号码会被拒绝.,或者只包含一个.. The |充当分隔 2 个不同模式的 OR:\.\d+ and \d+(?:\.\d*)?.
  • \d+(?:\.\d*)?:这将匹配并(隐式)断言整数部分中至少一位数字,后跟optional .(需要转义\ since .表示任何字符)和小数部分(可以是 0 个或多个数字)。可选性由下式表示?在最后。()可用于分组和捕获 - 但如果不需要捕获,则(?:)可用于禁用捕获(节省内存)。
  • \.\d+:这将匹配以下情况.78。它匹配.后跟至少一个(表示为+) digit.

如果您想确保从输入字符串中获得有意义的内容,这不是一个好的解决方案。您需要先定义所有预期单位,然后才能编写仅捕获有效数据的正则表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式查找字符串中的整数和小数 的相关文章

  • 正则表达式从 img 标签获取 src 值

    我正在使用以下正则表达式来获取src第一个的值imgHTML 文档中的标签 string match src
  • 将整数转换为特定格式的十六进制字符串

    我是 python 新手 有以下问题 我需要将整数转换为 6 个字节的十六进制字符串 例如 281473900746245 gt xFF xFF xBF xDE x16 x05 十六进制字符串的格式很重要 int 值的长度是可变的 格式 0
  • 不允许连续点的正则表达式

    我有一个正则表达式允许字母数字 下划线和点 但不允许连续点 2 a zA Z0 9 我现在还需要允许在字符串的第一个和最后一个字符中使用点 我怎样才能做到这一点 您可以像这样使用它和额外的前瞻 a zA Z0 9 不允许 开始时 不允许有
  • 捕获按键以过滤元素

    我正在创建一个
  • Perl 正则表达式匹配模式的多个实例并替换

    我有一个看起来像这样的字符串 abc 1 2 3 something here foo 10 6 34 somethingelse here def 1 2 another 我想将此字符串拆分为一个数组 其中包含 abc 1 2 3 som
  • 以 str.format 切片字符串

    我想实现以下目标str format x y 1234 5678 print str x 2 str y 2 我能够做到这一点的唯一方法是 print 0 1 format str x 2 str y 2 现在 这是一个例子 我真正拥有的是
  • MySql 查询在选择中将 NULL 替换为空字符串

    如何用空字符串替换 select 中的 NULL 值 输出 NULL 值看起来不太专业 这是非常不寻常的 根据我的语法 我希望它能够工作 我希望能得到一个解释 为什么没有 select CASE prereq WHEN prereq IS
  • 如何在 Perl 中找到正则表达式匹配的位置?

    我需要编写一个接收字符串和正则表达式的函数 我需要检查是否有匹配并返回匹配的开始和结束位置 正则表达式已经由qr 该函数还可能收到一个 全局 标志 然后我需要返回所有匹配的 开始 结束 对 我无法更改正则表达式 甚至无法添加 用户可能使用的
  • 正则表达式 - 避免表达式中出现字符串

    我正在尝试创建一个应该匹配以下情况的正则表达式 如果单词完全匹配 first second third 那么匹配应该失败 但如果它周围有任何字符 那么应该匹配该字符串 我还需要避免字符串中的某些字符集 如果这些字符是字符串的一部分 则匹配结
  • 使用 Beautifulsoup 和正则表达式提取 10-K Edgar 文件中的文本

    我想从大约 10000 个文件中自动提取 1A 风险因素 部分并将其写入 txt 文件 可以找到带有文件的示例 URLhere https www sec gov Archives edgar data 1800 0001047469190
  • 在 MySQL 中分割逗号分隔值

    我正在尝试将字符串中以逗号分隔的 值拆分为多列 样本数据 COL1 COL2 COL3 000002 000003 000042 09 31 51 007 004 007 预期输出 Pno Cno Sno 000002 09 007 000
  • 小数精度

    我使用小数类型进行高精度计算 货币 但我今天遇到了这个简单的划分 1 1 37 这应该再次得到 37 http www wolframalpha com input i 1 2F 281 2F37 29 http www wolframal
  • 所有语言中特殊字符的 Java 正则表达式

    在我的用户输入字段中 我想允许某些特殊字符 字母和数字的组合 我应该确保正则表达式模式在输入时允许此设置任何语言 基本上我构建的这个正则表达式也应该支持 unicode 表示 如何使用 Java 中的 Pattern 类来实现这一点 这里给
  • C++ 中的整数到十六进制字符串

    如何将整数转换为十六进制字符串C http en wikipedia org wiki C 2B 2B 我可以找到一些方法来做到这一点 但它们似乎主要针对 C 似乎没有一种本地方法可以在 C 中做到这一点 但这是一个非常简单的问题 我有一个
  • 通过搜索查找下一个文本并突出显示不起作用

    当在搜索框中搜索任何文本时 它可以找到并突出显示正确的文本 但是当搜索下一个 新文本时 它无法找到下一个 新文本 再次搜索时它不起作用 我无法找到问题 这JS below JS button search click function va
  • C++11 内部 std::string 表示形式 (libstdc++)

    std string 在 c 11 libstdc 中如何内部表示 在深入研究实现时 我发现 A string looks like this Rep M length basic string
  • 正则表达式 - 从行首和行尾修剪空格[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Link
  • SQL Server 转换选择一列并将其转换为字符串

    是否可以编写一条从表中选择列并将结果转换为字符串的语句 理想情况下 我希望有逗号分隔的值 例如 假设 SELECT 语句看起来像这样 SELECT column FROM table WHERE column lt 10 结果是一列包含值的
  • htaccess 301 重定向 - 删除查询字符串 (QSA)

    我一直在努力处理一些 htaccess 重定向 我只是花了一些时间在堆栈上阅读和搜索 但无法获得适合我的场景的答案 我正在将旧客户端网站的 301 重定向到新客户端 旧页面有参数查询 我想从网址中删除它 menu php idCategor
  • SWI Prolog 转义引号

    我需要在序言中将 放在字符串周围 我从另一个程序获取输入 看起来我无法转义该程序中的 因此我必须在序言中添加 否则序言语句将不起作用 感谢您的帮助 为了讨论strings https stackoverflow com a 39922411

随机推荐