简化正则表达式以替换附加到某些子字符串logi的下划线

2024-09-30 06:32:39 发布

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

输入字符串是:

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是单词之间的硬分隔符。在

我们的目标是这样做:

enter image description here

  • [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和新行之间不必要的空格。在

是否有一种不那么复杂的方法来实现相同的输出字符串来保持逻辑,即为什么按照上述方式进行替换?在


Tags: the字符串project结尾cell字符单词ad
1条回答
网友
1楼 · 发布于 2024-09-30 06:32:39

我不太理解您关于换行的倒数第二段,但除此之外,一个re.sub()就足以让您获得大部分方法:

>>> import re
>>> 
>>> re.sub(r'[ \ue000]+', lambda m: ' ' if '\ue000' in m.group() else '_ _', s)
'The Project Gutenber_ _g E_ _Book of The Ad_ _vent_ _ure_ _s of Sherlock Holmes\n_ _'

这将查找\ue000和空格的所有序列,然后使用lambda替换这些序列,该lambda根据匹配是否包含\ue000,返回一个空格或'_ _'。在

之后,据我所知(正如我所说,倒数第二段有点混乱),你只需要去掉下划线和空格:

^{pr2}$

相关问题 更多 >

    热门问题