首先,正则表达式需要同时适用于python和PCRE(PHP)。我试图忽略正则表达式模式后是否跟字母“ x”以区分尺寸,例如下面给出的示例中的“ number / number”之类的字符串:

dummy word 222/2334; Ø14 x Ø6,33/523,23 x 2311 mm


从这里开始,我尝试提取222/2334而不是6,33/523,23,因为该部分实际上是尺寸的一部分。到目前为止,我想到了这个正则表达式

((\d*(?:,?\.?)\d*(?:,?\.?))\s?\/\s?(\d*(?:,?\.?)\d*(?:,?\.?)))(?=\s?x)


它可以提取我不希望提取的内容,看起来像this。如果我将正向前瞻更改为负向,则它将捕获除6,33/523,23的最后一个“ 3”以外的两个视图。看起来像this。如何仅捕获222/2334?我在这里做错了什么?

所需的输出:

222/2334


我得到了什么

222/2334 6,33/523,2

最佳答案

您可以将这种简化的正则表达式与负前瞻配合使用:

((\d*(?:,?\.?)\d*(?:,?\.?))\s?\/\s?(\d*(?:,?\.?)\d*(?:,?\.?)))\b(?![.,]?\d|\s?x)


Updated RegEx Demo


最后使用单词边界以避免匹配部分数字很重要(正则表达式匹配到一个数字之前的原因)
还要在负前瞻条件中包含[.,]?\d,以便匹配不会在最后一个逗号之前的位置结束。




这个更短(更有效)的正则表达式也可以用于OP:

(\d+(?:[,.]\d+)*)\s*\/\s*(\d+(?:[,.]\d+)*)\b(?![.,]?\d|\s?x)


RegEx Demo 2

关于python - 为什么正面前瞻有效,而负面前瞻无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58276222/

10-10 00:34