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 个或多个 space 的片段,然后继续 sub in '',或
- 在字符串的末尾寻找一个包含 1 个或多个 space 的片段,然后继续在 ''
中进行 sub
相反,它似乎正在做的是正确地使用正则表达式捕获整个表达式,并根据我包含在管道正则表达式中的两个片段在 '' 中替换。
我在这里错过了什么?管道不应该只抓取并处理字符串的第一段吗?
正则表达式将匹配交替符号两侧的模式。就像你说的,它将匹配行首或行尾的 spaces。但是 re.sub
对字符串中的所有匹配项执行替换。考虑“foo”。前面的space匹配去掉。但随后 re.sub
继续搜索字符串中的其他模式。最后的space找到了,也去掉了。
我想弄清楚 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 个或多个 space 的片段,然后继续 sub in '',或
- 在字符串的末尾寻找一个包含 1 个或多个 space 的片段,然后继续在 '' 中进行 sub
相反,它似乎正在做的是正确地使用正则表达式捕获整个表达式,并根据我包含在管道正则表达式中的两个片段在 '' 中替换。
我在这里错过了什么?管道不应该只抓取并处理字符串的第一段吗?
正则表达式将匹配交替符号两侧的模式。就像你说的,它将匹配行首或行尾的 spaces。但是 re.sub
对字符串中的所有匹配项执行替换。考虑“foo”。前面的space匹配去掉。但随后 re.sub
继续搜索字符串中的其他模式。最后的space找到了,也去掉了。