Python 根据正则表达式中的第一个匹配项而不是源中的第一个匹配项,在正则表达式中设置优先级或管道?

Python 根据正则表达式中的第一个匹配项而不是源中的第一个匹配项,在正则表达式中设置优先级或管道?,python,regex,Python,Regex,如果我使用或管道式(a | B | C) 它总是在我的源中按顺序找到第一个匹配项,例如 ABC=A BCA=B CBA=C 事实上,我正在尝试设置它,所以我放置选项的顺序就是它寻找的顺序。换句话说,在我的示例中,它总是首先查找“A”,如果找到,则停止搜索并返回A,如果没有,则搜索B,如果没有找到,则搜索C,如果找到,则返回C。有没有一种方法可以按照这种方式对其进行优先级排序,以便在上述示例中,在每种情况下都能找到a?以@WiktorStribiżew的示例为基础: (A |(B | C(?

如果我使用
管道式
(a | B | C)

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

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

事实上,我正在尝试设置它,所以我放置选项的顺序就是它寻找的顺序。换句话说,在我的示例中,它总是首先查找“A”,如果找到,则停止搜索并返回
A
,如果没有,则搜索
B
,如果没有找到,则搜索
C
,如果找到,则返回
C
。有没有一种方法可以按照这种方式对其进行优先级排序,以便在上述示例中,在每种情况下都能找到
a

以@WiktorStribiżew的示例为基础:

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

基本上,使用负前瞻,然后对所有Or管道进行级联(使用括号)

  • 比赛A(A)

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

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


  • 您使用哪种语言?Javascript?也许
    (A |(B | C)(?!*A))
    ?@WiktorStribiżew似乎是公认答案的灵感来源,所以给了你一个kudo的投票。对评论的投票不会给分(我可能会作为一个单独的问题问这个问题,但既然你发布了答案,我想我会联系到这里:这是我实际的
    (a | B | C)
    :。我打开了“g”以显示所有匹配项,以确认每个namedgroup选项返回正确的值。当我使用负前瞻性构造它时,尽管它正确地找到了“C”,但该模式不知何故出现了混乱,我无法弄清楚到底发生了什么。请欣赏任何见解,如果必要,我将尝试提出一个新问题。对不起,发现了paragon,与现实世界隔绝了一段时间:)。我假设你已经找到了答案,但如果你没有,问题在于你的非贪婪量词。因为它将一直匹配,直到向前看可以通过为止,这就是它一直匹配到第二个“”字符的原因。要修复它:。我没有使用,而是使用了[^*\](如果需要,也可以添加新行字符)。现在,即使在使用g选项时,唯一应该匹配的是A。B/C不能在其中匹配,因为负前瞻失败。