我试图将多个连续的换行符和大写字母转换成"____“,这样我就可以解析它们了。
例如,
i = "Inc\n\nContact"
i = re.sub(r'([\n]+)([A-Z])+', r"____\2", i)
In [25]: i
Out [25]: 'Inc____Contact'这条绳子很好用。稍后我可以使用____解析它们。
但是,它不适用于这个特定的字符串。
i = "(2 months)\n\nML"
i = re.sub(r'([\n]+)([A-Z])+', r"____\2", i)
Out [31]: '(2 months)____L'它吃了大本营M.我在这里错过了什么?
发布于 2016-03-18 18:33:14
编辑以将多个连续换行符(\n)替换为____,应该这样做:
>>> import re
>>> i = "(2 months)\n\nML"
>>> re.sub(r'(\n+)(?=[A-Z])', r'____', i)
'(2 months)____ML'(?=[A-Z])用于断言“换行符后面跟着大写字母”。REGEX演示。
发布于 2016-03-18 18:40:10
让我们看一看正则表达式([\n]+)([A-Z])+ --第一部分([\n]+)很好,将换行符的多次出现匹配为一个组(注意--这与回车返回\r不匹配)。但是,第二部分([A-Z])+会将单个大写字母匹配到捕获组中--如果有多个大写字母,则会将组重置为最后匹配的大写字母,然后将其用于替换。
试试下面的内容,看看会发生什么
import re
i = "Inc\n\nABRAXAS"
i = re.sub(r'([\n]+)([A-Z])+', r"____\2", i)您可以简单地将+放在捕获组中,这样就可以在其中匹配多个大写字母。你也可以忽略它,因为它并没有什么区别,这些大写字母后面有多少个。
import re
i = "Inc\n\nABRAXAS"
i = re.sub(r'(\n+)([A-Z])', r"____\2", i)如果您想替换任何换行符序列,无论后面是什么-完全删除([A-Z])并尝试
import re
i = "Inc\n\nABRAXAS"
i = re.sub(r'(\n+)', r"____", i)如果您想考虑回车,也可以使用([\r\n]+)作为模式。
发布于 2016-03-18 18:26:33
尝试:
import re
p = re.compile(ur'[\r?\n]')
test_str = u"(2 months)\n\nML"
subst = u"_"
result = re.sub(p, subst, test_str)它将将字符串缩减为
(2 months)__ML请参阅演示
https://stackoverflow.com/questions/36091633
复制相似问题