Python 将字符串开头的成对字符替换为单个字符
我只想在刺痛开始的时候做这个。一些示例(我想用“-”替换“-”):Python 将字符串开头的成对字符替换为单个字符,python,regex,Python,Regex,我只想在刺痛开始的时候做这个。一些示例(我想用“-”替换“-”): “--foo”->“-foo” “----foo”->“----foo” “foo--bar”->“foo--bar” 由于第三种情况,我不能简单地使用s.replace(“-”,“-”)。我也试过一个正则表达式,但我不能让它专门用来替换成对的。我甚至尝试用r“\1”替换r”^(?:(-){2})+“,但这试图在开始时替换整个破折号块,我不知道如何让它只替换该块中的对 import re print re.sub(r'\--',
“--foo”->“-foo”
“----foo”->“----foo”
“foo--bar”->“foo--bar”
由于第三种情况,我不能简单地使用s.replace(“-”,“-”)
。我也试过一个正则表达式,但我不能让它专门用来替换成对的。我甚至尝试用r“\1”
替换r”^(?:(-){2})+“
,但这试图在开始时替换整个破折号块,我不知道如何让它只替换该块中的对
import re
print re.sub(r'\--', '',"--foo")
print re.sub(r'\--', '',"-----foo")
输出:
foo
-foo
编辑此答案适用于未完全编辑和更改的OP
输出:
foo
-foo
编辑此答案适用于未完全编辑和更改的OP
输出:
foo
-foo
编辑此答案适用于未完全编辑和更改的OP
输出:
foo
-foo
编辑此答案适用于未经完全编辑和更改的OP。以下是写给其他任何人的答案
>>> foo = '---foo'
>>> bar = '-----foo'
>>> foobar = 'foo--bar'
>>> foobaz = '-----foo--bar'
>>> re.sub('^(-+)\\1', '-', foo)
'-foo'
>>> re.sub('^(-+)\\1', '-', bar)
'---foo'
>>> re.sub('^(-+)\\1', '-', foobar)
'foo--bar'
>>> re.sub('^(-+)\\1', '-', foobaz)
'--foo--bar'
re.sub()
的模式是:
re.sub(pattern, replacement, string)
因此,在本例中,我们希望用-
替换-
。然而,在某些情况下,当我们有不想替换的--
时,问题就来了。
在这种情况下,我们只希望在字符串的开头匹配--
。在python正则表达式中,^
字符在模式
字符串中使用时,将仅与字符串开头的给定模式匹配-这正是我们所寻找的
方括号可以用来表示一组字符,因此[abc]匹配“a”或“b”或“c”。。。方括号集合开始处的up hat(^)将其反转,因此[^ab]表示除“a”或“b”之外的任何字符
回到我们谈论的话题上来。模式中的括号
表示一个“组”,然后可以用\\1
引用该组,表示第一个组。如果有第二组括号,我们可以用\\2
引用该子模式。额外的\
用于转义下一个斜杠。此模式也可以使用re.sub(r'^(-+)\1','-',foo)
编写,强制python将字符串解释为原始字符串,如模式前面的r
所示,从而消除了转义特殊字符的需要
现在模式已经全部设置好了,您只需进行替换
您想要替换模式的任何内容,并输入您正在搜索的字符串
这是写给其他来这里的人的
>>> foo = '---foo'
>>> bar = '-----foo'
>>> foobar = 'foo--bar'
>>> foobaz = '-----foo--bar'
>>> re.sub('^(-+)\\1', '-', foo)
'-foo'
>>> re.sub('^(-+)\\1', '-', bar)
'---foo'
>>> re.sub('^(-+)\\1', '-', foobar)
'foo--bar'
>>> re.sub('^(-+)\\1', '-', foobaz)
'--foo--bar'
re.sub()
的模式是:
re.sub(pattern, replacement, string)
因此,在本例中,我们希望用-
替换-
。然而,在某些情况下,当我们有不想替换的--
时,问题就来了。
在这种情况下,我们只希望在字符串的开头匹配--
。在python正则表达式中,^
字符在模式
字符串中使用时,将仅与字符串开头的给定模式匹配-这正是我们所寻找的
方括号可以用来表示一组字符,因此[abc]匹配“a”或“b”或“c”。。。方括号集合开始处的up hat(^)将其反转,因此[^ab]表示除“a”或“b”之外的任何字符
回到我们谈论的话题上来。模式中的括号
表示一个“组”,然后可以用\\1
引用该组,表示第一个组。如果有第二组括号,我们可以用\\2
引用该子模式。额外的\
用于转义下一个斜杠。此模式也可以使用re.sub(r'^(-+)\1','-',foo)
编写,强制python将字符串解释为原始字符串,如模式前面的r
所示,从而消除了转义特殊字符的需要
现在模式已经全部设置好了,您只需进行替换
您想要替换模式的任何内容,并输入您正在搜索的字符串
这是写给其他来这里的人的
>>> foo = '---foo'
>>> bar = '-----foo'
>>> foobar = 'foo--bar'
>>> foobaz = '-----foo--bar'
>>> re.sub('^(-+)\\1', '-', foo)
'-foo'
>>> re.sub('^(-+)\\1', '-', bar)
'---foo'
>>> re.sub('^(-+)\\1', '-', foobar)
'foo--bar'
>>> re.sub('^(-+)\\1', '-', foobaz)
'--foo--bar'
re.sub()
的模式是:
re.sub(pattern, replacement, string)
因此,在本例中,我们希望用-
替换-
。然而,在某些情况下,当我们有不想替换的--
时,问题就来了。
在这种情况下,我们只希望在字符串的开头匹配--
。在python正则表达式中,^
字符在模式
字符串中使用时,将仅与字符串开头的给定模式匹配-这正是我们所寻找的
方括号可以用来表示一组字符,因此[abc]匹配“a”或“b”或“c”。。。方括号集合开始处的up hat(^)将其反转,因此[^ab]表示除“a”或“b”之外的任何字符
回到我们谈论的话题上来。模式中的括号
表示一个“组”,然后可以用\\1
引用该组,表示第一个组。如果有第二组括号,我们可以用\\2
引用该子模式。额外的\
用于转义下一个斜杠。此模式也可以使用re.sub(r'^(-+)\1','-',foo)
编写,强制python将字符串解释为原始字符串,如模式前面的r
所示,从而消除了转义特殊字符的需要
现在模式都设置好了,您只需进行替换
您想要的任何操作即可