我试图理解我的python正则表达式出了什么问题。你知道吗
任务: 我有以下文字。你知道吗
This is a red fox\LF
that chases a cat.\LF
\LF
The dog barks.
我需要把第一句话连成一行来纠正:
This is a red fox that chases a cat.\LF
The dog barks.
解决方案: 我只是想出了一个简单的办法
re.sub(r'(\n)[^\n]', '', text)
问题: 然而我得到的却是:
This is a red foxhat chases a cat.
he dog barks.
我确信替换应该只替换分组的(\n)
。此任务的正确正则表达式是什么?你知道吗
基本上,您现在所说的是搜索任何新行,后跟一个非新行字符,并用一个空字符串替换这两个字符。你知道吗
但如果不包含第二个字符,则会匹配字符串中的任何新行,而这并不是您想要的。你知道吗
为了能够有一个严格的正则表达式,但不能替换所有匹配的正则表达式,必须使用捕获组
(...)
在正则表达式中捕获并存储括号之间的内容。你知道吗进行替换时,可以使用
\index
访问这些存储的组。 因此,对于第一个捕获的组\1
,对于第二个捕获的组\2
,以此类推对于您的问题,您可以使用一个正则表达式来匹配任何不带点的新行。
([^\.])\n
。当然,如果前面的字符不是一个点,你就要保留它。所以你抓住了它。把它放回你的替代品里,就像这样:Example on regex101
您可以使用以下正则表达式:
Working demo
您还可以使用:
但是你会得到一个不同的输出。你知道吗
您正在使用
t
和T
,因为您的模式匹配换行符和紧跟其后的字符。你知道吗您可以使用捕获组来记住字符是什么,并将其插入到字符串中。你知道吗
或者使用前瞻检查下一个字符,但不捕获它(在您的特定情况下,这可能是一个负前瞻,因为您正在检查否换行符):
相关问题 更多 >
编程相关推荐