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})|.+
部分地
匹配除数字或换行符以外的任何字符的1+倍[^\d\r\n]+
捕获组1,匹配1-2位、(\d{1,2}-\d{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否定模式是什么意思?