Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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_Replace - Fatal编程技术网

Python 正则表达式替换除模式以外的所有

Python 正则表达式替换除模式以外的所有,python,regex,replace,Python,Regex,Replace,这可能是重复的,但我试图替换除某个字符串模式之外的所有字符串模式。以下是字符串示例: 'dkas;6-17' 'dsajdl 10' 'dsjalkdj16-20' 这里的目标是用零来取代任何不是数字的东西。因此,我可以从上面的字符串中得到: '6-17' '' '16-20' 第二个字符串不会产生任何结果,因为它与模式不匹配。我知道正则表达式可以匹配我的模式,但我不知道如何使用regexp_replace来匹配除该模式之外的所有模式。下面是我所拥有的,但这取代了我想要保留的模式 re.su

这可能是重复的,但我试图替换除某个字符串模式之外的所有字符串模式。以下是字符串示例:

'dkas;6-17'
'dsajdl 10'
'dsjalkdj16-20'
这里的目标是用零来取代任何不是数字的东西。因此,我可以从上面的字符串中得到:

'6-17'
''
'16-20'
第二个字符串不会产生任何结果,因为它与模式不匹配。我知道正则表达式可以匹配我的模式,但我不知道如何使用regexp_replace来匹配除该模式之外的所有模式。下面是我所拥有的,但这取代了我想要保留的模式

re.sub('[0-9]{1,2}\-[0-9]{1,2}', '', text)

如果您的意思是第二个字符不会产生任何结果,那么您可以匹配除数字或换行符以外的任何字符,然后捕获组中的模式

如果sub应该留下一个空字符串,您可以使用替换来匹配整行

[^\d\r\n]+(\d{1,2}-\d{1,2})|.+
部分地

  • [^\d\r\n]+
    匹配除数字或换行符以外的任何字符的1+倍
  • (\d{1,2}-\d{1,2})
    捕获组1,匹配1-2位、
    -
    和1-2位
  • |
  • +
    将除换行符以外的任何字符再匹配1次以上
|

示例代码

输出


在字符串中查找所有匹配项并将它们连接在一起如何

>>> ''.join(re.findall('[0-9]{1,2}\-[0-9]{1,2}', 'dkas;6-17abc19-10'))
'6-1719-10'

>>> ''.join(re.findall('[0-9]{1,2}\-[0-9]{1,2}', 'dsajdl 10'))
''
考虑匹配

\d+-\d+|$

如果字符串是

dkas;6-17
dsjalkdj16-20kl21-33mn
dsajdl 10
第一个匹配项是
6-17
,第二个匹配项是行尾的空字符串

如果字符串是

dkas;6-17
dsjalkdj16-20kl21-33mn
dsajdl 10
将有三个匹配项,
16-20
21-33
,以及行末尾的空白

如果字符串是

dkas;6-17
dsjalkdj16-20kl21-33mn
dsajdl 10
第一个(也是唯一一个)匹配项是行末尾的空字符串


因此,如果有一个匹配项,则返回字符串末尾的空字符串;否则,根据需要返回第一个匹配项,或除最后一个之外的所有匹配项。

我想我最担心的是如何否定模式。@ben890否定模式是什么意思?