python - 条件 Python 正则表达式和命名组

标签 python regex

我有一个字符串:

/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/

相关文章:

python - 为什么 pickle 比 np.save 花费的时间长得多?

python - Flask-Migrate/Alembic 未使用基类和多文件结构检测模型

python - 从 python 脚本中获取 Jenkins BUILD 环境变量

regex - 如果使用分组元字符,搜索和替换正则表达式会给出两个不同的输出

python - 在新的 DataFrame 上使用经过训练的分类器

python - Opencv 和 python 参数中的方括号

javascript - 删除单个新行

.net - 字符之间的正则表达式 - 最后匹配

正则表达式操作 JavaScript 字符串

c# - 使用正则表达式屏蔽域电子邮件地址