首先,正则表达式需要同时适用于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/