Python 正则表达式来去除字符串空白

Python 正则表达式来去除字符串空白,python,regex,strip,Python,Regex,Strip,我需要在不使用strip、join或split方法的情况下删除字符串开头和结尾的空格 我搜索了许多类似的问题,找到了如下类似的答案 我不明白的是,“|”运算符用于将A或B与A | B匹配,但在这里,它用作“and”运算符 我想了解的是,这种使用对于|操作符来说是正常的,或者它在这里有另一个功能 为了更清楚一点,我将空格替换为“xxx” >>> pattern = re.compile(r'^\s+|\s+$') >>> mo = re.sub(pattern,

我需要在不使用
strip
join
split
方法的情况下删除字符串开头和结尾的空格

我搜索了许多类似的问题,找到了如下类似的答案

我不明白的是,“|”运算符用于将A或B与A | B匹配,但在这里,它用作“and”运算符

我想了解的是,这种使用对于|操作符来说是正常的,或者它在这里有另一个功能

为了更清楚一点,我将空格替换为“xxx”

>>> pattern = re.compile(r'^\s+|\s+$')
>>> mo = re.sub(pattern,'xxx','   life is beautiful   ')
>>> mo
'xxxlife is beautifulxxx'

r'^\s+|\s+$”
sub()

它的意思是:匹配字符串开头的空格(
^
)或字符串结尾的空格(
$


sub()
将替换所有匹配项。

它正在查找
'^\s+'
(字符串开头,一个或多个空格)或
'\s+$'
(一个或多个空格,字符串结尾)的实例,并将匹配项替换为
'xxx'
。它在传递的字符串的开头找到前者,并替换它。然后,它会在最后找到后者,并将其替换。

关键是要理解给定的模式将在输入字符串中多次匹配对于每个可能的匹配,它将决定使用前导空格或尾随空格<总之,两者都要考虑;前导和尾随空格

这可能就是产生混淆的原因

示例说明 为了澄清这一点,让我们看看

re.sub(模式、应答、字符串、计数=0、标志=0)

可选参数计数是要替换的最大模式出现次数;计数必须是非负整数。如果省略或为零,将替换所有引用。模式的空匹配项仅在与前一个匹配项不相邻时被替换,因此sub('x*','-','abc')返回'-a-b-c-'

count
设置为
1
时,更容易描述
sub
方法内部的实际情况。请看以下代码段:

>>> pattern = re.compile(r'^\s+|\s+$')
>>> mo0 = '   life is beautiful   '
>>> mo1 = re.sub(pattern, 'xxx', mo0, 1)
>>> mo2 = re.sub(pattern, 'xxx', mo1, 1)
>>> mo0
'   life is beautiful   '
>>> mo1
'xxxlife is beautiful   '
>>> mo2
'xxxlife is beautifulxxx'
这里的
sub
方法仅替换匹配模式的单个匹配项。在这种情况下,将处理
mo0
,并将结果放入
mo1
,其中只替换一次给定的模式-更精确地匹配前导空格。之后,以相同的方式处理
mo1
,并将结果放入
mo2
,其中仅再次替换给定模式-更精确地匹配尾随空白
m2
最终与前面在开头示例中定义的
mo
的结果相同。所以最后
mo
等于字符串,其中;前导和尾随空格按
mo2
处理。尽管如此,在每个步骤中,都使用逻辑
来选择要匹配的模式部分

较少的技术解释 我可能有另一个线索,为什么这是如此混乱。让我们仔细看看:

和/或(也叫和或)是一种语法连词,用来表示它所连接的一个或多个情况可能发生例如,“他将吃蛋糕、馅饼和/或布朗尼”这句话表明,尽管此人可以吃列出的三种甜点中的任何一种,但选择并不是排他性的;患者可以吃其中一种、两种或全部三种选择。

因此,相信维基百科和我自己与人相处的经验,我得出结论,当使用和/或在非正式交流中,并不总是清楚确切的含义是什么。在像数学这样的正式科学世界中,
的含义非常清楚。因此,维基百科进一步指出:

它用于描述逻辑和数学中的精确“或”,而口语中的“或”可能表示包含或排除或

一些法律文本的作者通过放弃法律文本中那些模棱两可的驱动因素来定义最佳实践()

然而,维基百科进一步指出:

和/或自19世纪中期以来已被用于官方、法律和商业文件,20世纪出现了更广泛使用的证据

这告诉我,它似乎在增长,即使在精确的环境中不鼓励使用它

总结
我想这句话的上下文并不清楚。如果一个人在句子中加入一个匹配的上下文,就不会再有任何混淆的空间了

|
是OR运算符,当第一次交替失败时,将测试第二次交替
re.sub
针对字符串中的每个位置对字符串进行多次测试。它不能是and运算符,因为您只需要一个替换成功。'sub(pattern,repl,string,count=0,flags=0)'“可选参数count是要替换的模式出现的最大数量;count必须是非负整数。如果省略或为零,将替换所有出现的情况。”。我明白这一点。既然|表示或,那么在替换开始处的空格以再次查找字符串的结尾之后,这怎么可能呢。如果在开始时没有空格,是的,很清楚,但是既然开始有空格,我真的还不明白。请你再详细说明一下为什么它会同时考虑这两个因素?它是re.sub()的属性吗?谢谢您的详细解释!当计数不为零时,全部清除。但是,如果count=0和“|”运算符同时出现,则开始出现歧义。不管怎样,我都会想办法的。