输入字符串是:
s = 'The\ue000 Project\ue000Gutenber g\ue000 E Book \ue000of\ue000 The\ue000 Ad vent ure s\ue000of\ue000 Sherlock\ue000 Holmes\n '
输出字符串为:
^{pr2}$注意,在输入字符串中,\ue000
是单词之间的硬分隔符。在
我们的目标是这样做:
[Cell 28]:用下划线替换空格(表示两个非\ue000
字符之间存在连接)
[Cell 29]:如果存在_ \uE000
序列,则删除下划线,因为前一个以下划线结尾的字符和下一个单词之间没有连接,(记住\ue000
是一个硬单词分隔符)。
[Cell 30]:然后用空格替换\ue000
,这样我们就只剩下一些带有下划线的单词,这些单词要么连接到单词的结尾字符,要么挂在两个空格之间的下划线:
[Cell 31]:对空格进行重复数据消除
[Cell 32]:删除两个空格之间的下划线
[Cell 33]:现在我们只剩下单词末尾的下划线了,我们可以安全地用_ _
替换它们,以表示这两个子词是可组合的。
按上述顺序排列的全套替换件:
^{3}$注意:第一个替换text.replace(u'\n ', '\n')
是必需的,因为字符串可能是一个全文文件,而仅仅使用str.strip()
将不足以清除\n
和新行之间不必要的空格。在
是否有一种不那么复杂的方法来实现相同的输出字符串来保持逻辑,即为什么按照上述方式进行替换?在
我不太理解您关于换行的倒数第二段,但除此之外,一个
re.sub()
就足以让您获得大部分方法:这将查找
\ue000
和空格的所有序列,然后使用lambda替换这些序列,该lambda根据匹配是否包含\ue000
,返回一个空格或'_ _'
。在之后,据我所知(正如我所说,倒数第二段有点混乱),你只需要去掉下划线和空格:
^{pr2}$相关问题 更多 >
编程相关推荐