Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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,我有一根绳子asd@12A/AXB25017/12A@(我想从中提取12A/AXB25017/12A) 我设计了一个regexp模式,如下所示 '.*(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)' 因为我可以有很多不同的字符串变体。我想提取的不同字母和数字的有效字符串变体可以是 1) AXB25017 2) 1/AXB25017 3) AXB25017/1 4) 1A/AXB25017 5) AXB25017/1A 6) EN/AXB25017 7) EN/A

我有一根绳子asd@12A/AXB25017/12A@(我想从中提取12A/AXB25017/12A)

我设计了一个regexp模式,如下所示

'.*(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)'
因为我可以有很多不同的字符串变体。我想提取的不同字母和数字的有效字符串变体可以是

1) AXB25017
2) 1/AXB25017
3) AXB25017/1
4) 1A/AXB25017
5) AXB25017/1A
6) EN/AXB25017
7) EN/AXB25017/1
当我这样做的时候

 re.match('.*(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)','  @12A/AXB25017/12A@').group(1)
它找不到首字母12A/但返回AXB25017/12A


在我的模式中,正确捕捉12A/还缺少什么?

正则表达式[A-Z0-9]+/中的第一个可选部分?不匹配,因为

它是可选的 前面的“match all”子表达式完全匹配 在正则表达式中包含分隔符:

.*\@(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)
如果有可能在第二个分隔符后面添加材料,请将其添加到正则表达式中

.*\@(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)\@
。。。这可能会大大简化:

\@[^@]+\@

正则表达式[A-Z0-9]+/中的第一个可选部分?不匹配,因为

它是可选的 前面的“match all”子表达式完全匹配 在正则表达式中包含分隔符:

.*\@(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)
如果有可能在第二个分隔符后面添加材料,请将其添加到正则表达式中

.*\@(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)\@
。。。这可能会大大简化:

\@[^@]+\@

删除。*并使用re.search@.+?@如何?有其他分隔符吗?这里的规则是什么?没有其他规则,只允许/如示例所示,其他所有规则都是噪音,[A-Z0-9]+/作为。*的一部分是有效匹配的,因此发动机放在那里是完全合法的。成功了吗?至少你会指示它不要贪婪。删除。*并使用re.search@.+?@,怎么样?有其他分隔符吗?这里的规则是什么?没有其他规则,只允许/如示例所示,其他所有规则都是噪音,[A-Z0-9]+/作为。*的一部分是有效匹配的,因此发动机放在那里是完全合法的。成功了吗?至少你会指示它不要贪婪。问题是它可能是在感兴趣的子字符串之前和之后的各种类型的垃圾字符串。如果你能识别say'anchor'元素单词或字符,比如你的示例中的@,它们保证在有感兴趣的子字符串的节之前和之后出现,您可以选择使用字符串函数或更多正则表达式提取中间字符串并删除垃圾。问题是,它可以是感兴趣的子字符串前后的各种类型的垃圾字符串。如果您可以识别say'anchor'元素单词或字符,与示例中保证在包含感兴趣的子字符串的节之前和之后出现的@一样,您可以选择使用字符串函数或更多正则表达式提取中间字符串并删除垃圾。