0

假设我们有这个文本:

text = "You don't need to try to find hidden meaning:\nin this text :sun_with_face:!\nthis text : does not have any :meaning :D"

现在注意到:sun_with_face:上面的文字了吗?这就是我试图通过将文本小部件的粗体和颜色更改为该特定部分来以某种方式突出显示的内容。

问题:

  • 如何过滤文本:these_words:?您可能会注意到这些是emoji.demojized()表情符号,因此可选的解决方案是突出显示列表中的所有单词,emoji.UNICODE_EMOJI但我觉得这会耗费大量资源和时间(因为列表包含 1000 多个项目)

  • 如何突出想要的东西。尽管我们可能会以某种方式解决第一个问题,但这些表情符号化的表情符号位于文本的中间......

编辑

澄清一下:我知道如何突出显示这个问题的文字。我只需要知道单词的位置来突出显示它,这是棘手的部分。还有:sun_with_face:。它可以是任何东西,只要它用 ':' 打开和关闭,并且中间没有空格 ( ) 和换行符 ( \n)。

4

1 回答 1

1

我认为您要问的是如何将突出显示应用于以冒号开头、具有某种文本跨度并以冒号结尾的文本。您可以使用文本小部件方法找到与该模式匹配的文本search,并且可以使用文本小部件的标签功能应用突出显示。

由于您要搜索模式,因此需要使用正则表达式搜索。您可以通过在调用该方法时设置regexp为来执行此操作。因为模式可以是任意长度,所以您还需要传入一个变量,以便 tkinter 可以返回它匹配的字符数。您可以使用此信息来应用突出显示。Truesearch

注意:使用正则表达式搜索时,表达式必须遵循Tcl 正则表达式语法,而不是 python 的。有一些细微的差别。

这是一个示例,它查找冒号的所有匹配项,其后紧跟最短的非空白字符组,然后是冒号。然后它将标签“highlight”添加到每个匹配项:

countVar = tk.IntVar()
start_index = "1.0"
while start_index:
    index = text_widget.search(r':\S+?:', start_index, stopindex="end",
                               count=countVar, regexp=True)
    if index:
        # ie: a match was found
        end_index = "{} + {} chars".format(index, countVar.get())
        text_widget.tag_add("highlight", index, end_index)
        start_index = end_index
    else:
        start_index = None
于 2018-10-22T21:04:38.393 回答