首先,regex需要同时适用于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
您可以将此简化正则表达式与负前瞻一起使用:
Updated RegEx Demo
在结尾使用单词边界以避免匹配部分数字是很重要的(正则表达式匹配到前面一个数字的原因)
还包括
[.,]?\d
在负先行条件中,这样匹配就不会在最后一个逗号之前的位置结束。这个更短(更高效)的正则表达式也适用于OP:
RegEx Demo 2
有两个简单选项。你知道吗
第一个选项既难看又长,但基本上是否定紧跟
x
的字符串上的正匹配,然后匹配没有它的模式。你知道吗(?!PATTERN(?=x))PATTERN
See regex in use here
第二个选项使用所有格量词,但是在python中必须使用
regex
模块而不是re
。你知道吗See regex in use here
另外,我将您的子模式更改为
\d+(?:[,.]\d+)?
。这将匹配一个或多个数字,然后可选地匹配.
或,
,后跟一个或多个数字。你知道吗相关问题 更多 >
编程相关推荐