python regex将newline(\n)替换为els

2024-10-01 09:23:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将多个连续换行符后接一个大写字母的连续换行符转换为“\uuyu”,以便进行解析。在

例如

i = "Inc\n\nContact"
i = re.sub(r'([\n]+)([A-Z])+', r"____\2", i) 

In [25]: i
Out [25]: 'Inc____Contact'

这根绳子很好用。我可以在以后使用。在

但是它在这个特定的字符串上不起作用。在

^{pr2}$

它吃掉了资本M。 我错过了什么?在


Tags: 字符串inrecontact大写字母outinc资本
3条回答

编辑要将多个连续换行符(\n)替换为____,应该这样做:

>>> import re
>>> i =  "(2 months)\n\nML"
>>> re.sub(r'(\n+)(?=[A-Z])', r'____', i)
'(2 months)____ML'

(?=[A-Z])是断言“换行符后跟大写字母”。REGEX DEMO。在

尝试:

import re
p = re.compile(ur'[\r?\n]')
test_str = u"(2 months)\n\nML"
subst = u"_"

result = re.sub(p, subst, test_str)

它会将字符串减少到

^{pr2}$

Demo

好吧,让我们看看您的regex ([\n]+)([A-Z])+-第一部分([\n]+)很好,它将一个新行的多个出现匹配到一个组中(注意,这不会匹配回车符\r)。然而,第二部分([A-Z])+指出了您的错误,它将一个大写字母匹配到一个捕获组中—如果有多个大写字母,它将多次将该组重置为最后一个匹配的大写字母,然后将其用于替换。在

试试下面的方法看看会发生什么

import re    
i = "Inc\n\nABRAXAS"
i = re.sub(r'([\n]+)([A-Z])+', r"____\2", i)

您可以简单地将+放在捕获组中,这样就可以将多个大写字母匹配到其中。你也可以省去它,因为它没有什么区别,有多少大写字母跟在后面。在

^{pr2}$

如果您想替换任何一个换行符序列,不管下面是什么-完全删除([A-Z])并尝试

import re
i = "Inc\n\nABRAXAS"
i = re.sub(r'(\n+)', r"____", i)

如果要考虑回车符,也可以使用([\r\n]+)作为模式

相关问题 更多 >