Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串开头的成对字符替换为单个字符_Python_Regex - Fatal编程技术网

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
所示,从而消除了转义特殊字符的需要

现在模式都设置好了,您只需进行
替换
您想要的任何操作即可