【问题标题】:Parse Number from string with regex使用正则表达式从字符串中解析数字
【发布时间】:2014-09-22 09:46:14
【问题描述】:

我有数千篇包含数字的文章描述。

它们看起来像:

约 2760h3x1000.5DIN345x1500e34

结果数字应该是:

  1. 2760
  2. 1000.5
  3. 1500
  • h3 或 3 不应是解析的结果,因为 h3 只是一个容差
  • 同样适用于 e34
  • DIN345 是一个需要排除的标准(每个数字都带有尾随 DIN 或 BN)

我当前的正则表达式是:

  • [^hHeE]([-+]?([0-9]+\.[0-9]+|[0-9]+))

这解决了所有问题,但不是常态。我怎样才能让这个“DIN”和“BN”被视为一个字符?

谢谢,汤姆

【问题讨论】:

  • 哪种语言?正则表达式在不同语言之间是不一样的
  • @Avinash 我认为编辑结果不太正确。 OP:环顾四周可能是您正在寻找的。​​span>
  • @Michelle 恢复了..
  • 你的意思是regex101.com/r/fN3zU5/20
  • 所有的字符串都是那种格式的吗? ca.####h3x####.#DINx####e34?如果不能,您能否向我们展示一些其他格式和预期的输出?

标签: regex numbers integer trailing


【解决方案1】:

尝试使用这个正则表达式:

(?<=x)[+-]?0*[0-9]+(?:\.[0-9]+)?|[+-]?0*[0-9]+(?:\.[0-9]+)?(?=h|e)

看起来你要匹配的测试用例中的每个数字都以 x 开头。

这是正则表达式的第一部分匹配的内容。 (?&lt;=x)[+-]?0*[0-9]+(?:\.[0-9]+)?

正则表达式的第二部分匹配直到 h 或 e 的数字。 [+-]?0*[0-9]+(?:\.[0-9]+)?(?=h|e)

正则表达式中[+-]?0*[0-9]+(?:\.[0-9]+)?的两部分是为了匹配数字。

【讨论】:

    【解决方案2】:

    如果我们可以假设这些数字总是四位数字,您可以使用正则表达式:

        (\d{4}\.\d+|\d{4})
    

    DEMO

    根据语言,您可能需要将\d 替换为[0-9]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      相关资源
      最近更新 更多