Regex返回匹配和扩展匹配

2024-06-16 10:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

regex可以返回匹配项和扩展匹配项。我的意思是一个regex表达式,它可以根据结构返回不同数量的已找到元素。我的文字是:

AB : CDE / 123.456.1; 1
AC : DEF / 3.1.2

我的回报(匹配)应该是:

'AB', 'CDE', '123.456.1', '1'
'AC', 'DEF','3.1.2'

因此,如果分号后面有一个值,那么regex应该匹配并返回该值。但如果没有,它仍然应该匹配的一部分,并返回其余的。你知道吗

我的代码是:

import re

s = '''AB : CDE / 123.456.1; 1
AC : DEF / 3.1.2'''

match1 = re.search(r'((?:AB|AC))\s*:\s*(\w+)\s*\/\s*([\w.]+)\s*(;\s*\d+)', s)
print(match1[0])

match2 = re.search(r'((?:AB|AC))\s*:\s*(\w+)\s*\/\s*([\w.]+)\s*', s)
print(match2[0])

其中match1只匹配第一次发生,match2只匹配第二次发生。在这两种情况下,正则表达式的工作原理是什么?你知道吗


Tags: re元素search数量ab表达式def结构
1条回答
网友
1楼 · 发布于 2024-06-16 10:42:43

r'((?:AB|AC))\s*:\s*(\w+)\s*\/\s*([\w.]+)\s*(;\s*\d+)'模式在末尾包含一个强制的(;\s*\d+)模式。您需要使它成为可选的,并且您可以通过在它后面添加?量词来实现,以便匹配子模式的1或0次出现。你知道吗

对于其他小增强,您可以使用

r'A[BC]\s*:\s*\w+\s*/\s*[\w.]+\s*(?:;\s*\d+)?'

注意:所有捕获组都被删除,而非捕获组则被引入,因为最后只能得到整个匹配值。你知道吗

细节

  • A[BC]-ABAC
    • \s*:\s*-用0+空格字符括起来的冒号
  • \w+-或更多单词字符
  • \s*/\s*-a/用0+空格字符括起来
  • [\w.]+-1个或多个单词或.字符
  • \s*-0+空格
  • (?:;\s*\d+)?-一个可选的
    • ;-a;
    • \s*-0+空格
    • \d+-1+位

相关问题 更多 >