我有一个字符串:
/foo/bar
以及以下正则表达式:
/(?P<g1>.*)/(?P<g2>.*)$
字符串与模式匹配并捕获两组:
g1 = foo
g2 = 条
如何强制进行可选匹配?
我需要将“/bar”捕获为g1 =“bar” (但不是/bar/)如果没有第二组可以匹配?
(使用 regex101 进行测试)
谢谢
最佳答案
您需要字符串 anchor ^
的开头将字符串限制为只有 2 个斜线。正如 Avinash Raj 指出的那样,您需要将正则表达式的某些部分设为可选。
^/(?P<g1>[^/\n]*)/?(?P<g2>[^/\n]*)?(?<!/)$
参见demo
\n
仅在多行模式下才需要,因此 [^/]
无法匹配换行符。
正则表达式说明:
-
^/
- 字符串和文字的开头/
-
(?P<g1>[^/\n]*)
- 第一个强制捕获组(必须匹配 1 次),匹配除/
之外的任何字符(或者\n
,如果你保留的话),0次或多次 -
/?
- 0 或 1/
字符 -
(?P<g2>[^/\n]*)?
- 可选的第二个捕获组匹配除/
之外的 0 个或多个字符和\n
-
(?<!/)$
- 前面带有/
以外的字符的字符串结尾.
关于python - 条件 Python 正则表达式和命名组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31266445/