re.sub 如何与 python 正则表达式中的竖线字符结合使用?

How does re.sub work in conjunction with the pipe character in a python regex?

我想弄清楚 Python 是如何知道删除字符串两端的 space 的。这是我所指的代码,这是我尝试重新创建 strip() 函数的第一步:

#! python3
#myStrip.py - I will be recreating the strip function in python
import re

def stripFunc(stringToStrip,character):
    
    if character == '':
        whiteSpRegex = re.compile(r'^\s+|\s+$')
        finishedString = whiteSpRegex.sub('',stringToStrip)
        return finishedString
        
    else:
        otherRegex = re.compile(rf'^{character}+|{character}+$')
        finishedString = otherRegex.sub('',stringToStrip)
        return finishedString
        
    
    
testString = ' Something with spaces on the ends '
finalR = stripFunc(testString, '')

该函数在这种情况下完全按照我希望的方式执行,但我不明白为什么,具体来说,末尾的 space 是如何被删除的。我认为这个正则表达式将按顺序:

  1. 在字符串的开头查找具有 1 个或多个 space 的片段,然后继续 sub in '',或
  2. 在字符串的末尾寻找一个包含 1 个或多个 space 的片段,然后继续在 ''
  3. 中进行 sub

相反,它似乎正在做的是正确地使用正则表达式捕获整个表达式,并根据我包含在管道正则表达式中的两个片段在 '' 中替换。

我在这里错过了什么?管道不应该只抓取并处理字符串的第一段吗?

正则表达式将匹配交替符号两侧的模式。就像你说的,它将匹配行首或行尾的 spaces。但是 re.sub 对字符串中的所有匹配项执行替换。考虑“foo”。前面的space匹配去掉。但随后 re.sub 继续搜索字符串中的其他模式。最后的space找到了,也去掉了。