正则表达式:Python (findall)。 OR 语句中元素的顺序导致不同的输出

问题描述 投票:0回答:1

我正在尝试了解正则表达式,并正在尝试一些示例,试图了解它的结果。我正在努力理解 OR (|) 中元素的顺序如何影响以下代码的输出


import re 
uni = "University of Sheffield" 
first = re.findall(".*U|S.*U|S",uni) 
second = re.findall(".*U|S.*S|U",uni)
third = re.findall(".*S|U.*S|U",uni)

如果我打印第一个、第二个和第三个变量,我会得到以下结果

first -> ['U', 'S']
second -> ['U']
third -> ['University of S']

我不明白为什么每个的输出都是这样的。我认为它应该是相同的,并且应该是['University of S']。我想知道是否有人能帮助我理解为什么这 3 种情况的解释不同?

谢谢!

python regex python-re findall
1个回答
0
投票

OR(|) 在第一个匹配处停止。 一旦匹配成功,在

.findall
:

期间仅检查剩余的字符串

第一种情况:

  • .*U
    匹配
    U
  • U
    之后的剩余字符串中,
    S
    匹配。
  • S
    匹配后没有任何内容。

第二种情况:

  • .*U
    匹配
    U
  • U
    之后的剩余字符串中,三个 OR 情况都不匹配。

第三种情况:

  • .*S
    匹配
    University of S
  • 在剩余的字符串中,三个 OR 情况都不匹配。
© www.soinside.com 2019 - 2024. All rights reserved.