为什么我的正则表达式中的可选捕获组不起作用?
Why my optional captured group in my regex does not work?
这是我通常会得到的文本示例:
CERTIFICATION/repos_1/test_examples_1_01_C.py::test_case[6]
CERTIFICATION/repos_1/test_examples_2_01_C.py::test_case[7]
INTEGRATION/test_example_scan_1.py::test_case
INTEGRATION/test_example_scan_2.py::test_case
这是我用来捕获 3 个不同组的正则表达式:
^.*\/(.*)\.py.*:{2}(.*(\[.*\])?)
如果我们以我的示例的第一行为例,我应该得到:
test_examples_1_BV_01_C - test_case[6] - [6]
最后一行:
test_example_scan_2 - test_case - None
但是如果您尝试使用此正则表达式,您会发现第一个示例不起作用。我不能得到
[6]。如果删除“?”您将无法匹配末尾没有“[.*]”的行
那么,我怎样才能获得所有这些信息呢?我做错了什么?
此致
您可以使用
^.*\/(.*)\.py.*::(.*?(\[.*?\])?)$
详情:
^
- 字符串开头
.*
- 除换行字符外的任何零个或多个字符,尽可能多
\/
- 一个 /
字符
(.*)
- 第 1 组:除换行字符外的任何零个或多个字符,尽可能多
\.py
- .py
子字符串
.*
- 除换行字符外的任何零个或多个字符,尽可能多
::
- ::
字符串
(.*?(\[.*?\])?)
- 第 2 组:除换行符以外的任何零个或多个字符,尽可能少,然后是可选的第 3 组匹配 [
,除此之外的任何零个或多个字符换行字符,尽可能少,和一个 ]
$
- 字符串结尾。
在否定字符的帮助下 class 你可以获得所有匹配项并使这个正则表达式更有效 高效:
^.*/([^.]+)\.py::([^[]+(\[[^]]*]|))$
这是我通常会得到的文本示例:
CERTIFICATION/repos_1/test_examples_1_01_C.py::test_case[6]
CERTIFICATION/repos_1/test_examples_2_01_C.py::test_case[7]
INTEGRATION/test_example_scan_1.py::test_case
INTEGRATION/test_example_scan_2.py::test_case
这是我用来捕获 3 个不同组的正则表达式:
^.*\/(.*)\.py.*:{2}(.*(\[.*\])?)
如果我们以我的示例的第一行为例,我应该得到:
test_examples_1_BV_01_C - test_case[6] - [6]
最后一行:
test_example_scan_2 - test_case - None
但是如果您尝试使用此正则表达式,您会发现第一个示例不起作用。我不能得到 [6]。如果删除“?”您将无法匹配末尾没有“[.*]”的行
那么,我怎样才能获得所有这些信息呢?我做错了什么?
此致
您可以使用
^.*\/(.*)\.py.*::(.*?(\[.*?\])?)$
详情:
^
- 字符串开头.*
- 除换行字符外的任何零个或多个字符,尽可能多\/
- 一个/
字符(.*)
- 第 1 组:除换行字符外的任何零个或多个字符,尽可能多\.py
-.py
子字符串.*
- 除换行字符外的任何零个或多个字符,尽可能多::
-::
字符串(.*?(\[.*?\])?)
- 第 2 组:除换行符以外的任何零个或多个字符,尽可能少,然后是可选的第 3 组匹配[
,除此之外的任何零个或多个字符换行字符,尽可能少,和一个]
$
- 字符串结尾。
在否定字符的帮助下 class 你可以获得所有匹配项并使这个正则表达式更有效 高效:
^.*/([^.]+)\.py::([^[]+(\[[^]]*]|))$