Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有任意顺序的两个非重复符号的正则表达式_Python_Regex - Fatal编程技术网

Python 具有任意顺序的两个非重复符号的正则表达式

Python 具有任意顺序的两个非重复符号的正则表达式,python,regex,Python,Regex,我需要创建与该字符串匹配的正则表达式: AA+1.01*2.01,BB*2.01+1.01,CC *和+的顺序应为任意 我创建了以下正则表达式: ^(([A-Z][A-Z](([*+][0-9]+(\.[0-9])?[0-9]?){0,2}),)*[A-Z]{2}([*+][0-9]+(\.[0-9])?[0-9]?){0,2})$ 但问题是,这个regex+或*可以使用两次,但我只需要一次,因此以下字符串应该匹配: AA+1*2,CC - true AA+1+2,CC - false (n

我需要创建与该字符串匹配的正则表达式:

AA+1.01*2.01,BB*2.01+1.01,CC
*和+的顺序应为任意 我创建了以下正则表达式:

^(([A-Z][A-Z](([*+][0-9]+(\.[0-9])?[0-9]?){0,2}),)*[A-Z]{2}([*+][0-9]+(\.[0-9])?[0-9]?){0,2})$
但问题是,这个regex+或*可以使用两次,但我只需要一次,因此以下字符串应该匹配:

AA+1*2,CC - true
AA+1+2,CC - false (now is true with my regex)
AA*1+2,CC - true
AA*1*2,CC - false (now is true with my regex)

应首先捕获其中一个
[+*]
,然后使用
负前瞻
匹配另一个

正则表达式:
[A-Z]{2}([+*])(?:\d+(?:\。\d+)?!\1)[+*](?:\d+(?:\。\d+),[A-Z]{2}

说明:

  • [A-Z]{2}
    匹配两个大写字母

  • ([+*])
    捕获
    +
    *
    中的任意一个

  • (?:\d+(?:\。\d+)
    将数字与可选的小数部分匹配

  • (?!\1)[+*]
    查找捕获的符号并与另一个匹配。因此,如果先前捕获了
    +
    ,则将匹配
    *

  • (?:\d+(?:\。\d+)
    将数字与可选的小数部分匹配

  • ,[A-Z]{2}
    匹配
    后跟两个大写字母


要匹配第一种情况,请使用下面的正则表达式

正则表达式:
(?:[A-Z]{2}([+*])(?:\d+(?:\.\d+)?!\1)[+*](?:\d+(?:\.\d+),+[A-Z]{2}

解释:在第一组中添加了除
、CC
之外的整个模式,并通过使用
+
匹配一个或多个这样的模式使其变得贪婪


要获得与给定示例匹配的正则表达式(扩展到任意数量的逗号),可以使用:

^(?:[A-Z]{2}([+*])?\d*\.?\d*(?!\1)[+*]?\d*\.?\d*,?)*$
请注意,此示例还允许使用尾随逗号。我不确定你对此能做些什么

如果尾部逗号有问题:

^(?:[A-Z]{2}([+*])?\d*\.?\d*(?!\1)[+*]?\d*\.?\d*,?)*?(?:[A-Z]{2}([+*])?\d*\.?\d*(?!\2)[+*]?\d*\.?\d*?)$

请提供更好的输入和所需输出示例。你所说的没有任何意义。
(?=.*\+)(?=.**)
字符串可以用逗号分开吗?如果逗号的数量有限制?@JaredGoguen不可能,没有限制尝试。如果没有更具体的规范,就很难正确地帮助您。第一个示例与之不匹配,请参见@WiktorStribiżew:我认为OP在那里输入了错误。看看他后面的例子,我不知道是否有打字错误。是的,我们等一下。我有一个正则表达式正确匹配了所有三个,但问题属于我通常不回答的问题。我不懂,但问题属于我通常不回答的问题。你不必这么做,我很奇怪。这会让字符串以一个悬垂的逗号结尾。@WiktorStribiżew注意到,但我添加了一个版本来禁止这种行为。我想在大多数情况下,用一个悬垂的逗号就可以了(但谁知道呢)。