【问题标题】:Python: how to emphasize a specific sequence of characters within a string when it is printed? [duplicate]Python:打印时如何强调字符串中的特定字符序列? [复制]
【发布时间】:2015-12-24 16:55:05
【问题描述】:

我有一个程序可以打印由小写字母和空格的随机序列组成的字符串。

当我打印字符串时,有没有办法强调该字符串中的某个目标词以使目标更容易在输出中发现?

例如:

当前代码:

>>> print(mystring)

mxxzjvgjaspammttunthcrurny dvszqwkurxcxyfepftwyrxqh

期望的行为:

>>> some_function_that_prints_with_emphasis(mystring,'spam')

mxxzjvgja垃圾邮件mttunthcrurny dvszqwkurxcxyfepftwyrxqh

其他可接受的强调形式是:

  • 加粗字符
  • 改变颜色
  • 大写
  • 用多余的字符分隔
  • 任何其他可以在 Python 3 中轻松实现的想法

我故意使要求含糊不清,因为作为初学者,我不知道 Python 能做什么,所以可能有一种我忽略的更简单的方法。

【问题讨论】:

  • 据我所知,我不确定 python 输出是否加粗或着色。如果字符是随机生成的,您需要回溯已经打印的内容才能达到该结果,不是吗?
  • @bhargav-rao 我不确定这个问题是否重复,因为作者提出了一些替代方案来强调文本。
  • @AmauryMedeiros 然后将 vtc 称为“太宽泛”

标签: python python-3.x


【解决方案1】:

基本上,您要查找的所有内容都可以通过 curses 模块完成;它旨在对终端执行高级控制,以执行更改颜色、粗体文本等操作。您需要使用各种has_* 命令来确定终端功能并选择您喜欢的强调风格,但在那之后docs page 和the linked tutorial 应该会给你所有你需要的信息。

为了更简单的使用,您可以打印出原始终端转义码来添加和删除颜色(您只需自己拆分行或使用re 执行替换以添加代码)。例如,将一行中的“垃圾邮件”突出显示为蓝色:

myline = "abc123spamscsdfwerf"
print(myline.replace('spam', '\033[94mspam\033[0m'))

为了方便使用,可以使用ansicolors,避免手动处理颜色转义等。

【讨论】:

    【解决方案2】:

    您可以将目标替换为大写的版本:

    def emphasis(string, target):
      return string.replace(target, target.upper())
    

    【讨论】:

      【解决方案3】:

      您可以找到您要查找的子字符串并在其下方放置一个标记,例如:

      needle = "spam"
      haystack = "mxxzjvgjaspammttunthcrurny dvszqwkurxcxyfepftwyrxqh"
      pos = haystack.find(needle)
      print(haystack)
      print(" "*(pos-1) + "^" * len(needle))
      

      【讨论】:

        猜你喜欢
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 2018-11-23
        • 1970-01-01
        • 2016-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多