首先,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)
它可以提取我不希望它提取的内容,它看起来像这样。如果我将正面展望更改为负面,它会捕获除 6,33/523,23
中的最后一个“3”之外的两个。它看起来像这样。如何只能捕获 222/2334
?我在这里做错了什么?
期望输出:
222/2334
我得到了什么
222/2334 6,33/523,2
有两个简单的选择。
第一个选项很难看,很长,但基本上否定了字符串上的一个正匹配,后面是x
,然后匹配没有它的模式。
(?! PATTERN(?=x))PATTERN
请在此处查看使用的正则表达式
(?!\d+(?:[,.]\d+)?\s?\/\s?\d+(?:[,.]\d+)?(?=\s?x))(\d+(?:[,.]\d+)?)\s?\/\s?(\d+(?:[,.]\d+)?)
第二个选项使用所有格量词,但是在python中,您必须使用< code>regex模块,而不是< code>re。
请在此处查看使用的正则表达式
(\d+(?:[,.]\d+)?+)\s?\/\s?(\d+(?:[,.]\d+)?+)(?!\s?x)
此外,我将子模式更改为\d (?:[,.]\d)?
。这将匹配一个或多个数字,然后可选地匹配。
或,
后跟一个或多个数字。
您可以将这个简化的正则表达式与负前瞻一起使用:
((\d*(?:,?\.?)\d*(?:,?\.?))\s?\/\s?(\d*(?:,?\.?)\d*(?:,?\.?)))\b(?![.,]?\d|\s?x)
更新的正则表达式演示
> < li>
务必在末尾使用单词边界,以避免匹配部分数字(这是正则表达式匹配到前一位数字的原因)
还包括[.,]?\d
处于负先行条件,以便匹配不会在最后一个逗号之前的位置结束。
这种更短(更高效)的正则表达式也适用于OP:
(\d+(?:[,.]\d+)*)\s*\/\s*(\d+(?:[,.]\d+)*)\b(?![.,]?\d|\s?x)
RegEx演示2
我正在使用以下正则表达式; 匹配Lucene查询字符串; 第一个非捕获组不受尊重,并返回 _title 而不是 。使用积极的前瞻会使整个正则表达式无法匹配任何内容。 它应该返回以下数组:;
我对正则表达式有很多困惑,我正在努力解决它们。这里有以下字符串: 我的两个不同正则表达式,其中我只更改了点的位置: 为什么第一个正则表达式吃最后一个“e”? 这个否定的前瞻性是如何使这个量词不贪婪的?我的意思是为什么它不能使用{end}之外的字符?
问题内容: 这就是我正在做的事(简化示例): 我试图把所有不以开头的行放在前面。这是错误: 怎么了? 问题答案: 据我所知,既没有前瞻性,也没有落后。切换到具有类似语法的更强大的语言,例如。
有时候我们需要匹配后面跟着特定模式的一段模式。比如,我们要从 1 turkey costs 30€ 这段字符中匹配价格数值。 我们需要获取 € 符号前面的数值(假设价格是整数)。 那就是前瞻断言要做的事情。 前瞻断言 语法为:x(?=y),它表示 “匹配 x, 仅在后面是 y 的情况"” 那么对于一个后面跟着 € 的整数金额,它的正则表达式应该为:\d+(?=€)。 let str = "1 tu
问题内容: 我的elasticsearch的映射如下所示: 问题是: 我正在使用elasticsearch_dsl Q()形成ES查询。当我的查询包含任何复杂的正则表达式时,它在大多数情况下都可以正常工作。但是,如果它包含正则表达式字符“!”,则它将完全失败。在里面。当搜索词包含“!”时,不会给出任何结果 在里面。 例如: 1.)(完美运作) 2.)(完美运作) 3.)(完美运作) 4.)(完美运
我用pcregrep写了一个正则表达式,一切都按预期进行,直到我添加了一个积极的前瞻。 场景: 我有以下文本文件: 目标: 我想在pcregrep中使用Regex来返回包含的行和包含的行,以及它们之间包含的行未被捕获。因此,它将捕获前三行(、、)并返回第一行()和第三行()。它不会捕获第四行和第五行,因为它们之间没有行。因此输出将是: 我尝试过的 如果我运行 (命令 1),这将捕获并返回: 不出所