python - 根据正则表达式中的第一个匹配项(而不是源中的匹配项)优先考虑正则表达式中的 OR Pipe?

标签 python regex

如果我使用像 (A|B|C) 这样的 OR 管道执行正则表达式

https://regex101.com/r/gB1eP0/4

它总是在我的源中按顺序找到第一个匹配项,例如

  • ABC=A
  • BCA=B
  • CBA=C

我实际上正在尝试设置它,以便我放置选项的顺序就是它寻找的顺序。换句话说,在我的例子中,它总是首先查找“A”,如果找到,则停止搜索并返回A,如果没有,它将搜索B,如果它没有发现它会搜索C,如果找到则返回C。有没有办法以这种方式确定优先级,以便实际上在上面的示例中在每种情况下都会找到 A

最佳答案

基于@WiktorStribiżew 的示例:

(A|(B|C(?!.*B))(?!.*A))

基本上,使用负先行,然后级联所有 Or 管道(使用括号)。

  1. 匹配 A (A)

  2. 如果后面没有 A (B)(?!.*A),则匹配 B

  3. 如果后面没有 B 或 A,则匹配 C (C)(?!.*B)(?!.*A)

https://regex101.com/r/zQ3pW0/1

关于python - 根据正则表达式中的第一个匹配项(而不是源中的匹配项)优先考虑正则表达式中的 OR Pipe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39195968/

相关文章:

python - Python 条件中的括号

javascript - 正则表达式拆分缩小的 SVG 路径

regex - 如何在JPQL中应用正则表达式?

php - 在帖子内容中搜索并替换 REGEX 以获取图像文件名

regex - 将句子大写的谷歌文档脚本

python - 如何在 Ubuntu 12.10 上安装 Google App 引擎?

python - 如何将图像添加到 turtle 屏幕而不会出错?

python - OS X 中 PyDev 和外部库的问题

python - 如何将 "2019-11-30T07:00:00+09:00"日期转换为整数?

javascript - 简单的正则表达式/:[a-z]+/not working as expected in javascript